code-coordinator 0.5.258__tar.gz → 0.5.260__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 (869) hide show
  1. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. code_coordinator-0.5.260/code_coordinator.egg-info/scm_version.json +8 -0
  4. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notify.py +38 -0
  5. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/reconcile.py +11 -0
  6. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/review.py +178 -7
  7. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/test_orchestrator.py +5 -2
  8. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review.py +210 -0
  9. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_test_orchestrator.py +23 -0
  10. code_coordinator-0.5.258/code_coordinator.egg-info/scm_version.json +0 -8
  11. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/workflows/cargo-test.yml +0 -0
  22. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/workflows/release-tui.yml +0 -0
  24. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/.gitignore +0 -0
  26. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/GOAL.md +0 -0
  28. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/LICENSE +0 -0
  29. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/README.md +0 -0
  31. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/board_bool_guard.py +0 -0
  52. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/board_schema.py +0 -0
  53. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/client.py +0 -0
  66. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/__init__.py +0 -0
  67. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/_common.py +0 -0
  68. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/acceptance.py +0 -0
  69. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/agent_ops.py +0 -0
  70. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/audit.py +0 -0
  71. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/chat.py +0 -0
  72. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/dispatch.py +0 -0
  73. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/dispatch_workers.py +0 -0
  74. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/drive.py +0 -0
  75. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/drive_queue.py +0 -0
  76. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/merge.py +0 -0
  81. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/milestone.py +0 -0
  82. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/plan_followup.py +0 -0
  83. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/plans.py +0 -0
  84. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/portal.py +0 -0
  85. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/pr.py +0 -0
  86. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/release.py +0 -0
  87. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/repo.py +0 -0
  88. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/report.py +0 -0
  89. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/review.py +0 -0
  90. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/scorecard.py +0 -0
  91. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/sessions.py +0 -0
  92. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/setup.py +0 -0
  93. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/status.py +0 -0
  94. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/terminal.py +0 -0
  95. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/test_gate.py +0 -0
  96. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/commands/tui.py +0 -0
  97. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/comments.py +0 -0
  98. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/config.py +0 -0
  99. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/config_reload.py +0 -0
  100. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/confirm_test.py +0 -0
  101. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/conflict_fix.py +0 -0
  102. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dao.py +0 -0
  103. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dashboard/__init__.py +0 -0
  104. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dashboard/fixture.py +0 -0
  105. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dashboard/index.html +0 -0
  106. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dashboard/server.py +0 -0
  107. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dashboard/terminal.py +0 -0
  108. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/db.py +0 -0
  109. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dead_end.py +0 -0
  110. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/decomposition_chat.py +0 -0
  111. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/README.md +0 -0
  112. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-agent.service +0 -0
  113. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-db-backup.service +0 -0
  114. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-db-backup.sh +0 -0
  115. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-db-backup.timer +0 -0
  116. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-drive-queue.service +0 -0
  117. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-drive-queue.timer +0 -0
  118. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-failure-notify.service +0 -0
  119. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-fleet-watchdog.service +0 -0
  120. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  121. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-notify.service +0 -0
  122. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-notify.timer +0 -0
  123. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-release-propagate.service +0 -0
  124. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-release-propagate.timer +0 -0
  125. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-release-window.service +0 -0
  126. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-release-window.timer +0 -0
  127. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-serve.service +0 -0
  128. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-web-dist-build.service +0 -0
  129. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-web-dist-build.timer +0 -0
  130. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy/coord-web.service +0 -0
  131. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy_manifest.py +0 -0
  132. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deploy_units.py +0 -0
  133. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/deps.py +0 -0
  134. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/diagnose.py +0 -0
  135. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dispatch.py +0 -0
  136. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/dist_name.py +0 -0
  137. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/drive.py +0 -0
  138. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/drive_queue.py +0 -0
  139. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/drive_state.py +0 -0
  140. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/events.py +0 -0
  141. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/failure_class.py +0 -0
  142. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/filelock.py +0 -0
  143. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/fleet_config_health.py +0 -0
  144. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/forge_availability.py +0 -0
  145. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/freshness.py +0 -0
  146. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/gate_a.py +0 -0
  147. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/gate_b.py +0 -0
  148. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/gate_snapshot.py +0 -0
  149. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/gates.py +0 -0
  150. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/github_ops.py +0 -0
  151. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/github_throttle.py +0 -0
  152. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/goal.py +0 -0
  153. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/graph_health.py +0 -0
  154. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/__init__.py +0 -0
  155. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/aggregate.py +0 -0
  156. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/__init__.py +0 -0
  157. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/agent_install.py +0 -0
  158. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/cargo_targets.py +0 -0
  159. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/claude_binary.py +0 -0
  160. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/plan_usage.py +0 -0
  171. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/release_cordon.py +0 -0
  172. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/repo_state.py +0 -0
  173. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/spawned_coord.py +0 -0
  174. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/stalled_pipeline.py +0 -0
  175. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/timer_active.py +0 -0
  176. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/toolchain.py +0 -0
  177. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/unit_drift.py +0 -0
  178. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/unit_enablement.py +0 -0
  179. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/checks/worktrees.py +0 -0
  180. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/cli.py +0 -0
  181. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/context.py +0 -0
  182. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/fleet_snapshot.py +0 -0
  183. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/models.py +0 -0
  184. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/pypi.py +0 -0
  185. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/registry.py +0 -0
  186. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/render.py +0 -0
  187. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/health/units.py +0 -0
  188. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/hooks.py +0 -0
  189. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/housekeeping.py +0 -0
  190. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/interactive.py +0 -0
  191. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/issue_store.py +0 -0
  192. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/liveness_auditor.py +0 -0
  193. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/machine_pause.py +0 -0
  194. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/merge_queue.py +0 -0
  195. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/milestone_chat.py +0 -0
  196. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/milestone_dispatch.py +0 -0
  197. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/milestone_gate.py +0 -0
  198. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/milestone_order.py +0 -0
  199. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/mock_author.py +0 -0
  200. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/models.py +0 -0
  201. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/network.py +0 -0
  202. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/new_issue_chat.py +0 -0
  203. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/__init__.py +0 -0
  204. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/baseline.py +0 -0
  205. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/cli.py +0 -0
  206. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/collect.py +0 -0
  207. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/digest.py +0 -0
  208. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/models.py +0 -0
  209. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/predicate.py +0 -0
  210. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/service.py +0 -0
  211. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/store.py +0 -0
  212. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/notifier/transport.py +0 -0
  213. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/openapi.py +0 -0
  214. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/overlap_fence.py +0 -0
  215. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/overlap_predict.py +0 -0
  216. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/parentage.py +0 -0
  217. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/parentage_github.py +0 -0
  218. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/pipeline.py +0 -0
  219. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/plan_parser.py +0 -0
  220. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/plans.py +0 -0
  221. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/platform_paths.py +0 -0
  222. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/portal_bridge.py +0 -0
  223. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/portal_store.py +0 -0
  224. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/portal_sync.py +0 -0
  225. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/pr_body_lint.py +0 -0
  226. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/prereqs.py +0 -0
  227. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/progress.py +0 -0
  228. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/providers/__init__.py +0 -0
  229. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/providers/base.py +0 -0
  230. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/providers/claude.py +0 -0
  231. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/providers/claude_pty.py +0 -0
  232. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/providers/opencode.py +0 -0
  233. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/queue_diagnose.py +0 -0
  234. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/reconcile_tick.py +0 -0
  235. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/refine_chat.py +0 -0
  236. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/release_cordon.py +0 -0
  237. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/release_propagate.py +0 -0
  238. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/release_verify.py +0 -0
  239. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/release_window.py +0 -0
  240. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/repo_edit.py +0 -0
  241. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/repo_onboard.py +0 -0
  242. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/reports.py +0 -0
  243. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/revalidate.py +0 -0
  244. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/scorecard.py +0 -0
  245. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/self_health.py +0 -0
  246. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/serve_app.py +0 -0
  247. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  248. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  249. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  250. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  251. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  252. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/portal-followup/SKILL.md +0 -0
  253. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  254. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  255. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/skills/update-issue/SKILL.md +0 -0
  256. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/smoke.py +0 -0
  257. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/spend_ceiling.py +0 -0
  258. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/split_work.py +0 -0
  259. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/sql.py +0 -0
  260. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/stage_projection.py +0 -0
  261. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/state.py +0 -0
  262. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/test_author.py +0 -0
  263. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/test_chat.py +0 -0
  264. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/test_report.py +0 -0
  265. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/tui_release.py +0 -0
  266. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/usage.py +0 -0
  267. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/usage_limits.py +0 -0
  268. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/usage_rollup.py +0 -0
  269. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coord/worker_events.py +0 -0
  270. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/coordinator.example.yml +0 -0
  271. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-agent.service +0 -0
  272. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-db-backup.service +0 -0
  273. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-db-backup.sh +0 -0
  274. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-db-backup.timer +0 -0
  275. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-drive-queue.service +0 -0
  276. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-drive-queue.timer +0 -0
  277. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-failure-notify.service +0 -0
  278. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-failure-notify.sh +0 -0
  279. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-fleet-watchdog.service +0 -0
  280. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-fleet-watchdog.timer +0 -0
  281. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-notify.service +0 -0
  282. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-notify.timer +0 -0
  283. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-release-propagate.service +0 -0
  284. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-release-propagate.timer +0 -0
  285. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-release-window.service +0 -0
  286. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-release-window.timer +0 -0
  287. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-serve.service +0 -0
  288. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-web-dist-build.service +0 -0
  289. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-web-dist-build.sh +0 -0
  290. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-web-dist-build.timer +0 -0
  291. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-web-rollback.sh +0 -0
  292. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/coord-web.service +0 -0
  293. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/deploy/node-shim.sh +0 -0
  294. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  295. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ADR_COORD_WEB_CI.md +0 -0
  296. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ADR_COORD_WEB_DIST.md +0 -0
  297. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/AGENT_OPERATIONS.md +0 -0
  298. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ARCHITECTURE.md +0 -0
  299. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ARCH_SECURITY_GATES.md +0 -0
  300. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/COCKPIT.md +0 -0
  301. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/CONTROL_CENTER.md +0 -0
  302. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/COST_DISCIPLINE.md +0 -0
  303. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/CROSS_PLATFORM.md +0 -0
  304. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/CUSTOMER_FACING_APPS.md +0 -0
  305. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/CUSTOMER_PORTAL.md +0 -0
  306. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/DRIVE_QUEUE.md +0 -0
  307. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/EPHEMERAL_WORKERS.md +0 -0
  308. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/FORGE_MIGRATION.md +0 -0
  309. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/GRAPHIFY_SETUP.md +0 -0
  310. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ISSUE_GUIDANCE.md +0 -0
  311. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/MAC_MINI.md +0 -0
  312. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  313. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/NOTIFIER.md +0 -0
  314. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/OPENCODE_VERIFICATION.md +0 -0
  315. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/OPERATING_GOTCHAS.md +0 -0
  316. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/OPERATOR_GUIDES.md +0 -0
  317. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/ORACLE_LOOP.md +0 -0
  318. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/PHONE_WEBAPP.md +0 -0
  319. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/PIPELINE_V2.md +0 -0
  320. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/PLATFORM_EVOLUTION.md +0 -0
  321. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/SECOND_BACKEND.md +0 -0
  322. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/STORE_SERVICE.md +0 -0
  323. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  324. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/WEB_CONTROL_CENTER.md +0 -0
  325. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/WSL_WINDOWS_WORKER.md +0 -0
  326. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/mocks/web/README.md +0 -0
  327. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/mocks/web/_tokens.css +0 -0
  328. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/mocks/web/issue-detail.html +0 -0
  329. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/mocks/web/pipeline-narrow.html +0 -0
  330. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/docs/mocks/web/pipeline-wide.html +0 -0
  331. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/graphify-out/.gitignore +0 -0
  332. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/install-agent.sh +0 -0
  333. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/pyproject.toml +0 -0
  334. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/audit_review_verdict_overrides.py +0 -0
  335. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  336. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/build-worker-image.sh +0 -0
  337. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/coordinator-machine.py +0 -0
  338. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/epic-down.sh +0 -0
  339. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/epic-up.sh +0 -0
  340. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/preflight.sh +0 -0
  341. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/provision-worker.sh +0 -0
  342. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  343. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  344. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/azure-workers/verify-github-token.sh +0 -0
  345. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/check_gh_argv_containment.py +0 -0
  346. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/codegen.py +0 -0
  347. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/coord-test-runner.sh +0 -0
  348. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/coord-venv-rollback.sh +0 -0
  349. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/drive-batch.sh +0 -0
  350. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/fleet_watchdog.py +0 -0
  351. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/gen_board_fixture.py +0 -0
  352. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/gen_mock_index.py +0 -0
  353. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/next_release_tag.py +0 -0
  354. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/run_tests_in_populated_home.sh +0 -0
  355. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/run_tests_without_gh.sh +0 -0
  356. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/smoke_437_interactive.py +0 -0
  357. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/verify_878_review_capture.py +0 -0
  358. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/verify_release_published.py +0 -0
  359. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/scripts/verify_release_wheel.py +0 -0
  360. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/setup.cfg +0 -0
  361. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/SMOKE_SET.md +0 -0
  362. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/__init__.py +0 -0
  363. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  364. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/contract.md +0 -0
  365. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/manifest.yml +0 -0
  366. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  367. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  368. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  369. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  370. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-37/conftest.py +0 -0
  371. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-37/contract.md +0 -0
  372. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-37/manifest.yml +0 -0
  373. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  374. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  375. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/contract.md +0 -0
  376. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/manifest.yml +0 -0
  377. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  378. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  379. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  380. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  381. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  382. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  383. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  384. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  385. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  386. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  387. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-51/contract.md +0 -0
  388. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  389. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  390. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-51/manifest.yml +0 -0
  391. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-51/tsconfig.json +0 -0
  393. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  394. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  395. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  396. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/contract.md +0 -0
  397. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  398. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/manifest.yml +0 -0
  399. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  400. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  401. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  402. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  403. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  404. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  405. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  406. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  407. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  408. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  409. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  410. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  411. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/contract.md +0 -0
  412. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  413. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/manifest.yml +0 -0
  414. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  415. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  416. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  417. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  418. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  419. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  420. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  421. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/conftest.py +0 -0
  422. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/board-pipeline-basic.json +0 -0
  423. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  424. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  425. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  426. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  427. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/all_pass.json +0 -0
  428. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  429. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/mixed_fail.json +0 -0
  430. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  431. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  432. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/skip.json +0 -0
  433. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/playwright/truncated.json +0 -0
  434. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  435. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  436. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  437. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  438. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  439. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  440. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  441. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  442. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_acceptance.py +0 -0
  443. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_acceptance_drivers.py +0 -0
  444. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent.py +0 -0
  445. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_api_error.py +0 -0
  446. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_app.py +0 -0
  447. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_branch_base.py +0 -0
  448. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_branch_capture.py +0 -0
  449. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_config_free_1712.py +0 -0
  450. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_deploy_units_endpoint.py +0 -0
  451. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_dirty_worktree.py +0 -0
  452. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  453. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_graph_self_heal.py +0 -0
  454. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_health_h3.py +0 -0
  455. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_idle_restart.py +0 -0
  456. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_push_failure.py +0 -0
  457. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_reap.py +0 -0
  458. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_repos_and_pull.py +0 -0
  459. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_restart_services_endpoint.py +0 -0
  460. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_skills_self_heal.py +0 -0
  461. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_startup_diagnostics.py +0 -0
  462. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_update.py +0 -0
  463. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_update_bluegreen.py +0 -0
  464. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_usage_limit.py +0 -0
  465. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_agent_zero_commit.py +0 -0
  466. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_ambient_home_isolation.py +0 -0
  467. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_approve_dependency_busy_2804.py +0 -0
  468. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_approve_reject_plan.py +0 -0
  469. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_approve_usage_gate.py +0 -0
  470. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_approved_work_2532.py +0 -0
  471. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_assignment_already_recorded_daemon.py +0 -0
  472. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_audit_log.py +0 -0
  473. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_audit_outcome.py +0 -0
  474. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_audit_query.py +0 -0
  475. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_auto_loop.py +0 -0
  476. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_auto_release_publish_2035.py +0 -0
  477. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_base_checkout_restore.py +0 -0
  478. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_block_log.py +0 -0
  479. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_cap_762.py +0 -0
  480. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_fixture.py +0 -0
  481. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_read_path.py +0 -0
  482. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_schema.py +0 -0
  483. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_service.py +0 -0
  484. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_state.py +0 -0
  485. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_board_wire.py +0 -0
  486. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_brain.py +0 -0
  487. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_branch_model.py +0 -0
  488. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_bug_intake.py +0 -0
  489. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_build_worker_image_env_update.py +0 -0
  490. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cargo_cache.py +0 -0
  491. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_check_gh_argv_containment.py +0 -0
  492. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_ci_acceptance_gate_1950.py +0 -0
  493. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_ci_fix.py +0 -0
  494. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_ci_gitlab.py +0 -0
  495. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_ci_parity_2091.py +0 -0
  496. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_ci_store.py +0 -0
  497. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_claim.py +0 -0
  498. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_claude_md_budget.py +0 -0
  499. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_acceptance.py +0 -0
  500. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_assign.py +0 -0
  501. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  502. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_assign_interactive_remote.py +0 -0
  503. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_assign_provider.py +0 -0
  504. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  505. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_audit.py +0 -0
  506. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_chat_continue.py +0 -0
  507. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_decide.py +0 -0
  508. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_diagnose_config_provenance.py +0 -0
  509. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_diagnose_forge_availability.py +0 -0
  510. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_diagnose_graph.py +0 -0
  511. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_diagnose_self.py +0 -0
  512. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_doctor.py +0 -0
  513. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_doctor_config_free_1801.py +0 -0
  514. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  515. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_drive.py +0 -0
  516. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_drive_queue.py +0 -0
  517. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_escalate.py +0 -0
  518. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_fix_headless_review.py +0 -0
  519. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_gate_a.py +0 -0
  520. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_install_drift.py +0 -0
  521. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_install_skills.py +0 -0
  522. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_issue_comment.py +0 -0
  523. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_issue_create_label.py +0 -0
  524. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_issue_reopen.py +0 -0
  525. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_issue_view_list.py +0 -0
  526. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_merge.py +0 -0
  527. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_assign.py +0 -0
  528. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_capture.py +0 -0
  529. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_chat_add_child.py +0 -0
  530. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_dispatch.py +0 -0
  531. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_gate_b.py +0 -0
  532. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_gate_c.py +0 -0
  533. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_order.py +0 -0
  534. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  535. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_milestone_ship.py +0 -0
  536. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_network.py +0 -0
  537. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_new_issue_chat.py +0 -0
  538. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_plans.py +0 -0
  539. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_portal.py +0 -0
  540. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_pr.py +0 -0
  541. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_pull_artifact.py +0 -0
  542. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_queue.py +0 -0
  543. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_reattach_sessions.py +0 -0
  544. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_refine_board.py +0 -0
  545. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_release_preflight.py +0 -0
  546. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_release_propagate.py +0 -0
  547. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_release_window.py +0 -0
  548. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_repo_2220.py +0 -0
  549. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  550. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_scorecard.py +0 -0
  551. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_set_review_findings.py +0 -0
  552. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_advisory_terminal.py +0 -0
  553. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_contested_tag.py +0 -0
  554. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_merge_queue.py +0 -0
  555. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_provider.py +0 -0
  556. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_review_finalizing.py +0 -0
  557. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_test_failed_tag.py +0 -0
  558. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_status_usage_limit.py +0 -0
  559. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_sync_comments_873.py +0 -0
  560. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_test_plan.py +0 -0
  561. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_track.py +0 -0
  562. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_tui_update.py +0 -0
  563. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cli_wait.py +0 -0
  564. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_client_base_install.py +0 -0
  565. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_commands_common.py +0 -0
  566. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_comments.py +0 -0
  567. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_completion_summary.py +0 -0
  568. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_config.py +0 -0
  569. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_config_acceptance.py +0 -0
  570. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_config_audit.py +0 -0
  571. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_config_pricing.py +0 -0
  572. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  573. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_config_usage_gate.py +0 -0
  574. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_confirm_test.py +0 -0
  575. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_conflict_fix.py +0 -0
  576. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_conflict_fix_semantic.py +0 -0
  577. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  578. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_test.py +0 -0
  579. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_test_runner_baseline.py +0 -0
  580. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_test_runner_populated_home.py +0 -0
  581. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_test_runner_routing.py +0 -0
  582. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_test_runner_toolchain.py +0 -0
  583. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_uat.py +0 -0
  584. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coord_web_sse_restart_live.py +0 -0
  585. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_coordinator_machine.py +0 -0
  586. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_cross_platform_imports.py +0 -0
  587. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dao.py +0 -0
  588. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dashboard.py +0 -0
  589. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dashboard_fixture.py +0 -0
  590. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dashboard_terminal.py +0 -0
  591. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dashboard_terminal_live.py +0 -0
  592. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_db.py +0 -0
  593. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dead_end.py +0 -0
  594. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_decomposition_chat.py +0 -0
  595. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_coord_db_backup.py +0 -0
  596. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_coord_web_dist.py +0 -0
  597. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_coord_web_rollback.py +0 -0
  598. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_drive_queue_unit.py +0 -0
  599. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_failure_notify_unit.py +0 -0
  600. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_manifest.py +0 -0
  601. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_notify_unit.py +0 -0
  602. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_units_lane.py +0 -0
  603. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deploy_web_unit.py +0 -0
  604. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_deps.py +0 -0
  605. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_diagnose.py +0 -0
  606. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dispatch.py +0 -0
  607. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dispatch_target_validation.py +0 -0
  608. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_dist_name.py +0 -0
  609. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_done_housekeeping.py +0 -0
  610. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive.py +0 -0
  611. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_queue.py +0 -0
  612. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_queue_blocked_rendering.py +0 -0
  613. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_queue_launch_argv.py +0 -0
  614. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  615. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_queue_roll_pending.py +0 -0
  616. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  617. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_state.py +0 -0
  618. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_drive_tmux.py +0 -0
  619. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_epic_up_capability_detection.py +0 -0
  620. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  621. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_epic_up_image_provenance.py +0 -0
  622. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_errors.py +0 -0
  623. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_events.py +0 -0
  624. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_failure_class.py +0 -0
  625. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_filelock.py +0 -0
  626. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  627. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_fix_of_force_override.py +0 -0
  628. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_fleet_config_health.py +0 -0
  629. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_fleet_health_probes.py +0 -0
  630. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_fleet_health_snapshot.py +0 -0
  631. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_fleet_watchdog.py +0 -0
  632. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_forge_availability.py +0 -0
  633. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_freshness.py +0 -0
  634. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_gate_a.py +0 -0
  635. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_gate_b.py +0 -0
  636. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_gate_snapshot_staleness.py +0 -0
  637. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_gates.py +0 -0
  638. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  639. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_gen_mock_index.py +0 -0
  640. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_generated_rust_fixture.py +0 -0
  641. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_generated_types_fixture.py +0 -0
  642. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_github_ops.py +0 -0
  643. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_github_throttle.py +0 -0
  644. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_goal.py +0 -0
  645. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_graph_health.py +0 -0
  646. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_graph_selfheal_absent_2237.py +0 -0
  647. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_handoff.py +0 -0
  648. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_checks.py +0 -0
  649. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_cli.py +0 -0
  650. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_cli_graph.py +0 -0
  651. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_config.py +0 -0
  652. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_context.py +0 -0
  653. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_coord_web_ci_pin.py +0 -0
  654. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_deploy_lane_facts.py +0 -0
  655. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_fix.py +0 -0
  656. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_incident_regression.py +0 -0
  657. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_pypi.py +0 -0
  658. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_registry.py +0 -0
  659. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_release_cordon_probe.py +0 -0
  660. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_timer_active.py +0 -0
  661. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_toolchain.py +0 -0
  662. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_unit_drift.py +0 -0
  663. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_health_unit_enablement.py +0 -0
  664. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_hooks.py +0 -0
  665. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_human_attended_437.py +0 -0
  666. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_init.py +0 -0
  667. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_integration.py +0 -0
  668. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_briefing_echo.py +0 -0
  669. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_pane_log_2541.py +0 -0
  670. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_prefill_state.py +0 -0
  671. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_session_relaunch.py +0 -0
  672. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_test_verdict_backstop.py +0 -0
  673. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_token_attribution.py +0 -0
  674. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_interactive_worktree.py +0 -0
  675. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_issue_store_seam.py +0 -0
  676. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_liveness_auditor.py +0 -0
  677. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_liveness_notify.py +0 -0
  678. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_lock_contention_ratchet.py +0 -0
  679. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_machine_pause.py +0 -0
  680. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_merge_queue.py +0 -0
  681. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_merge_verify.py +0 -0
  682. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_milestone_chat.py +0 -0
  683. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_milestone_dispatch.py +0 -0
  684. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_milestone_gate.py +0 -0
  685. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_milestone_order.py +0 -0
  686. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_milestone_seam.py +0 -0
  687. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_mock_author.py +0 -0
  688. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_model_tiering.py +0 -0
  689. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_models.py +0 -0
  690. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_models_config_labels.py +0 -0
  691. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_needs_attention.py +0 -0
  692. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_network.py +0 -0
  693. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_new_issue_chat.py +0 -0
  694. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_next_release_tag.py +0 -0
  695. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_node_shim.py +0 -0
  696. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_baseline.py +0 -0
  697. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_cli.py +0 -0
  698. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_collect.py +0 -0
  699. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_config.py +0 -0
  700. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_drive_seam.py +0 -0
  701. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_isolation.py +0 -0
  702. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_predicate.py +0 -0
  703. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_quiet_hours.py +0 -0
  704. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notifier_service.py +0 -0
  705. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notify.py +0 -0
  706. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_notify_drain.py +0 -0
  707. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_openapi.py +0 -0
  708. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_operational_defaults.py +0 -0
  709. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_overlap_fence.py +0 -0
  710. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_overlap_predict.py +0 -0
  711. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_packaged_deploy_units.py +0 -0
  712. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_parentage.py +0 -0
  713. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_paste_landed.py +0 -0
  714. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  715. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_pipeline.py +0 -0
  716. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_plan_followup_approve_plan_command.py +0 -0
  717. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_plan_followup_pr_command.py +0 -0
  718. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_plan_followup_review_command.py +0 -0
  719. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_plan_only.py +0 -0
  720. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_plan_parser.py +0 -0
  721. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_platform_paths.py +0 -0
  722. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_portal_bridge.py +0 -0
  723. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_portal_config.py +0 -0
  724. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_portal_store.py +0 -0
  725. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_portal_sync.py +0 -0
  726. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_pr_body_lint.py +0 -0
  727. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_prereqs.py +0 -0
  728. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_production_db_guard.py +0 -0
  729. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_progress.py +0 -0
  730. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_provider_seam.py +0 -0
  731. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_providers.py +0 -0
  732. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_providers_config_labels.py +0 -0
  733. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_providers_pty.py +0 -0
  734. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_quiet_hours.py +0 -0
  735. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_quiet_hours_store_2146.py +0 -0
  736. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reap_merged_sessions.py +0 -0
  737. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reap_stale_interactive_tick.py +0 -0
  738. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile.py +0 -0
  739. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_branch.py +0 -0
  740. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_completions.py +0 -0
  741. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  742. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_merges.py +0 -0
  743. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_no_agent_record.py +0 -0
  744. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_tick.py +0 -0
  745. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reconcile_usage_limit_done.py +0 -0
  746. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_refine_chat.py +0 -0
  747. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_cordon_2101.py +0 -0
  748. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  749. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_cordon_deadlock_2240.py +0 -0
  750. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_cordon_stuck_2490.py +0 -0
  751. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_propagate.py +0 -0
  752. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_propagate_threshold.py +0 -0
  753. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_roll_between_legs_2854.py +0 -0
  754. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_roll_window_handoff.py +0 -0
  755. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_unified_1242.py +0 -0
  756. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_verify.py +0 -0
  757. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_release_window.py +0 -0
  758. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_remote_auto_prune.py +0 -0
  759. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_remote_interactive_reaper.py +0 -0
  760. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_repo_add.py +0 -0
  761. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_repo_edit_2220.py +0 -0
  762. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_repo_graph_fleet_2237.py +0 -0
  763. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_repo_onboard_2220.py +0 -0
  764. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_report_result_push.py +0 -0
  765. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_reports.py +0 -0
  766. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_retry.py +0 -0
  767. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_retry_advisory_1606.py +0 -0
  768. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_retry_type_1636.py +0 -0
  769. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_revalidate.py +0 -0
  770. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_end_review_without_verdict.py +0 -0
  771. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_parse_failure_diagnostic.py +0 -0
  772. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_reaffirm.py +0 -0
  773. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_state.py +0 -0
  774. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_verdict_backstop.py +0 -0
  775. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_verdict_override_audit.py +0 -0
  776. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_verdict_relay.py +0 -0
  777. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_review_zero_commits.py +0 -0
  778. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_scoped_review_wiring.py +0 -0
  779. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_scorecard.py +0 -0
  780. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_self_health.py +0 -0
  781. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_serve.py +0 -0
  782. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_serve_app_board_trim.py +0 -0
  783. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_session.py +0 -0
  784. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_slice_issue_attribution.py +0 -0
  785. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_smoke.py +0 -0
  786. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_smoke_live_checkout_restore.py +0 -0
  787. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_smoke_workflow.py +0 -0
  788. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_spend_ceiling.py +0 -0
  789. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_spend_ceiling_coordinator.py +0 -0
  790. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_split.py +0 -0
  791. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_split_work.py +0 -0
  792. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_sql_dialect.py +0 -0
  793. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_stage_projection.py +0 -0
  794. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_stalled_pipeline.py +0 -0
  795. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_state.py +0 -0
  796. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_state_review_findings_daemon.py +0 -0
  797. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_status_fleet_footer.py +0 -0
  798. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_stop_1567.py +0 -0
  799. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_store_contract.py +0 -0
  800. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_stuck.py +0 -0
  801. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  802. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_terminal_command.py +0 -0
  803. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_test_author.py +0 -0
  804. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_test_chat.py +0 -0
  805. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_test_report.py +0 -0
  806. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_test_verdict_parsing.py +0 -0
  807. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_test_verdict_transcript_floor.py +0 -0
  808. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_text_io_encoding_audit.py +0 -0
  809. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_thin_client_board_audit.py +0 -0
  810. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_thin_client_config_load_1080.py +0 -0
  811. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_thin_client_daemon_routing_906.py +0 -0
  812. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_tmux_host.py +0 -0
  813. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_tmux_session.py +0 -0
  814. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_transcript_floor.py +0 -0
  815. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_usage.py +0 -0
  816. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_usage_limits.py +0 -0
  817. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_usage_rollup.py +0 -0
  818. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_venv_live_install_2121.py +0 -0
  819. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_version_single_source.py +0 -0
  820. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_watch.py +0 -0
  821. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  822. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worker_env_venv_isolation.py +0 -0
  823. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worker_events.py +0 -0
  824. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worker_image_pin_sync.py +0 -0
  825. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worker_safety.py +0 -0
  826. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worker_test_scoping.py +0 -0
  827. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worktree.py +0 -0
  828. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  829. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/Cargo.lock +0 -0
  830. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/Cargo.toml +0 -0
  831. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/cargo-config-local-quadraui.toml.example +0 -0
  832. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/approved.rs +0 -0
  833. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/audit.rs +0 -0
  834. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/chat.rs +0 -0
  835. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/data.rs +0 -0
  836. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/dialogs.rs +0 -0
  837. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/doc_tabs.rs +0 -0
  838. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/drive.rs +0 -0
  839. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/drive_queue.rs +0 -0
  840. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/escalation.rs +0 -0
  841. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/events.rs +0 -0
  842. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/fixtures.rs +0 -0
  843. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/fleet_health.rs +0 -0
  844. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/fleet_sessions.rs +0 -0
  845. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/fleet_terminals.rs +0 -0
  846. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/format.rs +0 -0
  847. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/milestone_dag.rs +0 -0
  848. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/mod.rs +0 -0
  849. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/msv.rs +0 -0
  850. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/pipeline.rs +0 -0
  851. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/plans.rs +0 -0
  852. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/render.rs +0 -0
  853. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/reports.rs +0 -0
  854. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/sessions.rs +0 -0
  855. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/settings_ui.rs +0 -0
  856. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/sidebar.rs +0 -0
  857. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/terminal.rs +0 -0
  858. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/tests.rs +0 -0
  859. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/types/generated.rs +0 -0
  860. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/types.rs +0 -0
  861. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/app/workspace.rs +0 -0
  862. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/bin/gtk.rs +0 -0
  863. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/commands.rs +0 -0
  864. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/lib.rs +0 -0
  865. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/main.rs +0 -0
  866. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/src/settings.rs +0 -0
  867. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/tests/acceptance.rs +0 -0
  868. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/tests/cli.rs +0 -0
  869. {code_coordinator-0.5.258 → code_coordinator-0.5.260}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.258
3
+ Version: 0.5.260
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.258
3
+ Version: 0.5.260
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.260",
3
+ "distance": 0,
4
+ "node": "g573c17e8ef6c8019f91d8f409127e24e5e3224fd",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-28"
8
+ }
@@ -3660,6 +3660,28 @@ def post_orphaned_review_findings(
3660
3660
  return posted_ids
3661
3661
 
3662
3662
 
3663
+ def _dispatch_board_pending_pr_opens(config: Config) -> None:
3664
+ """Load the board, open PRs for any work-leg completions still missing
3665
+ one, and save (#2844).
3666
+
3667
+ Runs BEFORE smoke/review dispatch so the ``pull_request`` CI run starts
3668
+ the instant a work leg pushes its branch, overlapping the ~20-minute
3669
+ smoke leg and the review leg instead of being serialised after both.
3670
+ `dispatch_pending_pr_opens` (:mod:`coord.review`) is itself idempotent —
3671
+ it always finds-or-creates via GitHub — so calling it every pass, even
3672
+ after `dispatch_review` already opened the PR, only ever finds the
3673
+ existing one. Mirrors :func:`_dispatch_board_pending_smoke` exactly, and
3674
+ is safe to call even when the board file doesn't exist.
3675
+ """
3676
+ from coord.board_service import read_board, write_board
3677
+ from coord.review import dispatch_pending_pr_opens
3678
+
3679
+ board = read_board()
3680
+ opened = dispatch_pending_pr_opens(board, config)
3681
+ if opened:
3682
+ write_board(board)
3683
+
3684
+
3663
3685
  def _dispatch_board_pending_smoke(config: Config) -> None:
3664
3686
  """Load the board, dispatch any pending Test-stage smoke, and save.
3665
3687
 
@@ -4223,6 +4245,15 @@ def _run_drain_locked(config: Config) -> DrainResult:
4223
4245
  except Exception: # noqa: BLE001
4224
4246
  log.exception("notify drain: stuck test_state sweep failed")
4225
4247
 
4248
+ # Step 2.5 (#2844): open PRs for work-leg completions still missing one —
4249
+ # BEFORE the Test-stage dispatch below, so the pull_request CI run starts
4250
+ # overlapping smoke instead of waiting for review dispatch to open the
4251
+ # PR ~20 minutes later.
4252
+ try:
4253
+ _dispatch_board_pending_pr_opens(config)
4254
+ except Exception: # noqa: BLE001
4255
+ log.exception("notify drain: PR-open dispatch failed")
4256
+
4226
4257
  # Step 3: dispatch pending Test-stage smoke (#1426). Runs BEFORE review
4227
4258
  # dispatch to mirror the pipeline's Work -> Test -> Review order.
4228
4259
  try:
@@ -4524,6 +4555,13 @@ def run(
4524
4555
  # dispatch — skipped while `_roll_pending` is true, same posture the
4525
4556
  # drive-queue tick takes under a pending roll.
4526
4557
  if not _roll_pending:
4558
+ # #2844: open PRs for work-leg completions still missing one, before
4559
+ # smoke/review dispatch — see _dispatch_board_pending_pr_opens.
4560
+ try:
4561
+ _dispatch_board_pending_pr_opens(config)
4562
+ except Exception: # noqa: BLE001
4563
+ pass
4564
+
4527
4565
  try:
4528
4566
  _dispatch_board_pending_smoke(config)
4529
4567
  except Exception: # noqa: BLE001
@@ -2226,6 +2226,17 @@ def reconcile(board: Board, config: Config) -> list[str]:
2226
2226
  _escalate_spend_ceiling_best_effort(a, entry)
2227
2227
  changed.append(a.assignment_id)
2228
2228
 
2229
+ # Open PRs for completed work-like assignments still missing one (#2844).
2230
+ # Runs BEFORE smoke/review dispatch below so the pull_request CI run
2231
+ # starts overlapping the smoke leg instead of waiting for review dispatch
2232
+ # to open the PR itself once smoke finishes. Idempotent — see
2233
+ # dispatch_pending_pr_opens's docstring.
2234
+ from coord.review import dispatch_pending_pr_opens
2235
+
2236
+ for opened in dispatch_pending_pr_opens(board, config):
2237
+ if opened.assignment_id is not None:
2238
+ changed.append(opened.assignment_id)
2239
+
2229
2240
  # Dispatch pending reviews for all completed work assignments.
2230
2241
  # We iterate board.completed (not just newly-done) so that a failed
2231
2242
  # dispatch on a previous reconcile pass is retried here automatically.
@@ -14,6 +14,10 @@ Public entry points:
14
14
  - `dispatch_review(...)` — full path: find/open PR, pick reviewer,
15
15
  build briefing, send to agent server, add a review `Assignment` to the
16
16
  board. Called from reconcile when a work assignment transitions to done.
17
+ - `dispatch_pending_pr_opens(...)` — #2844: open a PR the instant a work leg
18
+ pushes its branch, rather than waiting for `dispatch_review` to do it once
19
+ the Test/smoke leg finishes — lets the `pull_request` CI run overlap smoke
20
+ and review instead of being serialised after both.
17
21
 
18
22
  Why a separate module: the work-dispatch path (`coord/dispatch.py`) is shaped
19
23
  around `Proposal` objects from the brain. Reviews are triggered by completion
@@ -1869,6 +1873,177 @@ def _find_or_open_pr(
1869
1873
  return None
1870
1874
 
1871
1875
 
1876
+ def _resolve_pr_base_branch(
1877
+ completed: Assignment,
1878
+ repo,
1879
+ *,
1880
+ milestone_fetcher=None,
1881
+ ) -> str:
1882
+ """Resolve the PR base branch for `completed` (#1077's develop_branch /
1883
+ milestone routing).
1884
+
1885
+ Shared by :func:`dispatch_review` and :func:`dispatch_pending_pr_opens`
1886
+ (#2844) so an early PR-open and the later review dispatch always agree
1887
+ on the base — opening against the wrong base would surface as a PR that
1888
+ `find_pr_for_branch` still finds, but whose diff nobody intended.
1889
+ """
1890
+ base_branch = repo.default_branch
1891
+ if getattr(repo, "develop_branch", None):
1892
+ from coord.branch_model import resolve_base_branch # noqa: PLC0415
1893
+
1894
+ fetch_milestone = milestone_fetcher or _fetch_issue_milestone_number
1895
+ milestone_number = fetch_milestone(repo.github, completed.issue_number)
1896
+ base_branch = resolve_base_branch(repo, milestone_number)
1897
+ return base_branch
1898
+
1899
+
1900
+ def open_pr_for_completed_work(
1901
+ completed: Assignment,
1902
+ config: Config,
1903
+ *,
1904
+ pr_lookup=_find_or_open_pr,
1905
+ milestone_fetcher=None,
1906
+ commits_ahead_checker=None,
1907
+ ) -> dict | None:
1908
+ """Open (or find) the PR for `completed` as soon as its branch is pushed
1909
+ (#2844), instead of waiting until review dispatch — which itself waits
1910
+ for the Test/smoke leg to finish, ~20 minutes later.
1911
+
1912
+ Opening this early is what lets GitHub's ``pull_request`` CI run overlap
1913
+ the smoke leg and the review leg instead of being serialised after both
1914
+ — the ~25-minute median dead time #2844 measured across 8 issues.
1915
+
1916
+ Returns the ``{number, url, existed}`` dict `pr_lookup` (default
1917
+ :func:`_find_or_open_pr`) returns, or ``None`` when a PR should not be
1918
+ opened yet: no repo config, no branch, the branch has 0 commits ahead of
1919
+ its base (#1534's zero-commit gate, applied here too so an empty branch
1920
+ never gets a PR), or `pr_lookup` itself fails.
1921
+
1922
+ Stores the resulting URL on ``completed.pr_url`` as a side effect, purely
1923
+ so a caller scanning the board can skip a row without a fresh GitHub
1924
+ round-trip (see :func:`dispatch_pending_pr_opens`). This is advisory
1925
+ only: `dispatch_review`'s own `pr_lookup` call and the merge phase's
1926
+ `create_pr` both re-resolve the PR from GitHub
1927
+ (``github_ops.find_pr_for_branch``) rather than trusting a cached field,
1928
+ so a stale or missing ``pr_url`` here can never cause a duplicate PR —
1929
+ it can only cost one redundant lookup.
1930
+ """
1931
+ repo = config.repo(completed.repo_name)
1932
+ if repo is None or not completed.branch:
1933
+ return None
1934
+
1935
+ base_branch = _resolve_pr_base_branch(
1936
+ completed, repo, milestone_fetcher=milestone_fetcher
1937
+ )
1938
+
1939
+ # #1534: same zero-commit gate `dispatch_review` applies — never open a
1940
+ # PR for a branch that (as far as GitHub can confirm) carries no commits
1941
+ # over its base. Fail-open: `commits_ahead_checker` returns `None` (never
1942
+ # a bare 0) on any lookup failure, so a transient `gh` blip can't block a
1943
+ # legitimate early PR-open.
1944
+ _ahead_check = commits_ahead_checker or github_ops.branch_commits_ahead
1945
+ _ahead = _ahead_check(repo.github, base_branch, completed.branch)
1946
+ if _ahead == 0:
1947
+ return None
1948
+
1949
+ try:
1950
+ pr = pr_lookup(
1951
+ repo.github,
1952
+ branch=completed.branch,
1953
+ default_branch=base_branch,
1954
+ issue_number=completed.issue_number,
1955
+ issue_title=completed.issue_title,
1956
+ assignment_type=completed.type,
1957
+ )
1958
+ except Exception: # noqa: BLE001 — best-effort; dispatch_review retries later
1959
+ log.warning(
1960
+ "[pr-open] %s: pr_lookup raised opening/finding a PR for branch "
1961
+ "%r — will retry from dispatch_review or the next pass",
1962
+ completed.assignment_id, completed.branch, exc_info=True,
1963
+ )
1964
+ return None
1965
+
1966
+ if pr:
1967
+ completed.pr_url = pr.get("url")
1968
+ return pr
1969
+
1970
+
1971
+ def dispatch_pending_pr_opens(
1972
+ board: Board,
1973
+ config: Config,
1974
+ *,
1975
+ pr_lookup=_find_or_open_pr,
1976
+ milestone_fetcher=None,
1977
+ commits_ahead_checker=None,
1978
+ ) -> list[Assignment]:
1979
+ """Bulk PR-open pass (#2844) — open a PR the instant a work leg pushes a
1980
+ branch, rather than waiting for review dispatch to do it after the
1981
+ Test/smoke leg finishes.
1982
+
1983
+ Scans `board.completed` for work-like rows that are ``status="done"``
1984
+ (a work leg that never reaches "done" never appears here, so a failed
1985
+ work leg can never leave an orphan PR open — #2844's "failed work legs"
1986
+ requirement), carry a branch, and have no `pr_url` recorded yet. Both
1987
+ `reconcile()` and `coord notify` are expected to route through here every
1988
+ pass — the same bulk-choke-point shape as
1989
+ :func:`coord.smoke.dispatch_pending_smoke` and
1990
+ :func:`dispatch_pending_reviews` — so a row missed on an earlier pass (no
1991
+ repo config yet, a transient `gh` failure) is retried automatically.
1992
+
1993
+ Gated on ``reviews.enabled``/``reviews.auto_dispatch``: this path exists
1994
+ solely to feed `dispatch_review`'s own PR lookup earlier, so when reviews
1995
+ are off there is no reason to open a PR ahead of anything.
1996
+
1997
+ Idempotent by construction: `pr_lookup` (`_find_or_open_pr`) always
1998
+ checks `find_pr_for_branch` before creating, and both `dispatch_review`
1999
+ and the merge phase's `create_pr` do the same — so calling this every
2000
+ tick, including after review dispatch already opened the PR itself, only
2001
+ ever finds the existing one.
2002
+
2003
+ Returns the `completed` `Assignment`s a PR was opened/found for this
2004
+ pass. The caller is responsible for persisting the board (only `pr_url`
2005
+ is mutated on `board`-owned rows).
2006
+ """
2007
+ if not (config.reviews.enabled and config.reviews.auto_dispatch):
2008
+ return []
2009
+
2010
+ opened: list[Assignment] = []
2011
+ for completed in board.completed:
2012
+ if completed.type not in WORK_LIKE_TYPES:
2013
+ continue
2014
+ if completed.status != "done":
2015
+ continue
2016
+ if not completed.branch:
2017
+ continue
2018
+ if completed.pr_url:
2019
+ continue
2020
+ repo = config.repo(completed.repo_name)
2021
+ if repo is None:
2022
+ continue
2023
+ # #522-style chokepoint: never open a PR for work GitHub already
2024
+ # considers finished (issue closed / a PR already merged) — mirrors
2025
+ # dispatch_review's own terminal check so a stray late pass can't
2026
+ # reopen a PR against dead work.
2027
+ if github_ops.work_is_terminal(
2028
+ repo.github,
2029
+ completed.issue_number,
2030
+ completed.branch,
2031
+ trust_issue_closed=trust_issue_closed_for(completed.type),
2032
+ ):
2033
+ continue
2034
+ pr = open_pr_for_completed_work(
2035
+ completed,
2036
+ config,
2037
+ pr_lookup=pr_lookup,
2038
+ milestone_fetcher=milestone_fetcher,
2039
+ commits_ahead_checker=commits_ahead_checker,
2040
+ )
2041
+ if pr:
2042
+ opened.append(completed)
2043
+
2044
+ return opened
2045
+
2046
+
1872
2047
  def _fetch_agent_advertised_repos(
1873
2048
  host: str,
1874
2049
  port: int = AGENT_PORT,
@@ -2101,13 +2276,9 @@ def dispatch_review(
2101
2276
  # `branch` payload field below, so they never disagree. The milestone
2102
2277
  # lookup itself is skipped entirely (no `gh` call) when the repo hasn't
2103
2278
  # opted in — a non-opted-in repo pays zero extra cost.
2104
- base_branch = repo.default_branch
2105
- if getattr(repo, "develop_branch", None):
2106
- from coord.branch_model import resolve_base_branch # noqa: PLC0415
2107
-
2108
- fetch_milestone = milestone_fetcher or _fetch_issue_milestone_number
2109
- milestone_number = fetch_milestone(repo.github, completed.issue_number)
2110
- base_branch = resolve_base_branch(repo, milestone_number)
2279
+ base_branch = _resolve_pr_base_branch(
2280
+ completed, repo, milestone_fetcher=milestone_fetcher
2281
+ )
2111
2282
 
2112
2283
  # #1534: ZERO-COMMIT GATE. Refuse to spend a metered review on a branch
2113
2284
  # that carries no commits over its base — there is literally nothing to
@@ -293,9 +293,12 @@ def local_machine(config: Config) -> Machine | None:
293
293
  don't have to re-derive the match. Returns ``None`` when this host isn't
294
294
  a recognized machine in ``coordinator.yml``.
295
295
  """
296
- local_hostname = socket.gethostname().split(".")[0]
296
+ local_hostname = socket.gethostname().split(".")[0].lower()
297
297
  for machine in config.machines:
298
- if machine.name == local_hostname or machine.host.split(".")[0] == local_hostname:
298
+ if (
299
+ machine.name.lower() == local_hostname
300
+ or machine.host.split(".")[0].lower() == local_hostname
301
+ ):
299
302
  return machine
300
303
  return None
301
304
 
@@ -2920,6 +2920,216 @@ def test_dispatch_review_passes_assignment_type_to_pr_lookup(
2920
2920
  assert captured.get("assignment_type") == "mock-author"
2921
2921
 
2922
2922
 
2923
+ # ── open_pr_for_completed_work / dispatch_pending_pr_opens (#2844) ──────────
2924
+ #
2925
+ # #2844: the PR used to open at review-dispatch time — after the ~20-minute
2926
+ # smoke leg finished — serialising CI onto the end of the pipeline instead of
2927
+ # overlapping it. These cover the new early-open path that fires the moment
2928
+ # a work leg pushes its branch.
2929
+
2930
+
2931
+ def test_open_pr_for_completed_work_opens_immediately_after_work_done(
2932
+ two_machine_config: Config,
2933
+ ) -> None:
2934
+ """A `status="done"` work row with a branch gets its PR opened right
2935
+ away — not gated on any test/review state — and the URL is cached on
2936
+ the assignment."""
2937
+ from coord.review import open_pr_for_completed_work
2938
+
2939
+ completed = _completed_assignment()
2940
+ calls: list[dict] = []
2941
+
2942
+ def _pr_lookup(repo_github, **kw):
2943
+ calls.append(kw)
2944
+ return {"number": 7, "url": "https://github.com/acme/api/pull/7", "existed": False}
2945
+
2946
+ pr = open_pr_for_completed_work(
2947
+ completed, two_machine_config,
2948
+ pr_lookup=_pr_lookup,
2949
+ commits_ahead_checker=lambda repo, base, branch: 3,
2950
+ )
2951
+
2952
+ assert pr == {"number": 7, "url": "https://github.com/acme/api/pull/7", "existed": False}
2953
+ assert completed.pr_url == "https://github.com/acme/api/pull/7"
2954
+ assert len(calls) == 1
2955
+ assert calls[0]["branch"] == "issue-1-fix"
2956
+ assert calls[0]["assignment_type"] == "work"
2957
+
2958
+
2959
+ def test_open_pr_for_completed_work_skips_zero_commit_branch(
2960
+ two_machine_config: Config,
2961
+ ) -> None:
2962
+ """#1534's zero-commit gate applies to the early open too — an empty
2963
+ branch must never get a PR, early or late."""
2964
+ from coord.review import open_pr_for_completed_work
2965
+
2966
+ completed = _completed_assignment()
2967
+ calls: list[dict] = []
2968
+
2969
+ def _pr_lookup(repo_github, **kw):
2970
+ calls.append(kw)
2971
+ return {"number": 7, "url": "u", "existed": False}
2972
+
2973
+ pr = open_pr_for_completed_work(
2974
+ completed, two_machine_config,
2975
+ pr_lookup=_pr_lookup,
2976
+ commits_ahead_checker=lambda repo, base, branch: 0,
2977
+ )
2978
+
2979
+ assert pr is None
2980
+ assert completed.pr_url is None
2981
+ assert calls == []
2982
+
2983
+
2984
+ def test_dispatch_pending_pr_opens_opens_for_done_work_with_branch(
2985
+ two_machine_config: Config,
2986
+ ) -> None:
2987
+ """The bulk pass finds every eligible done/work-like/branched row and
2988
+ opens (or finds) a PR for each, recording pr_url on the row."""
2989
+ from coord.review import dispatch_pending_pr_opens
2990
+
2991
+ completed = _completed_assignment()
2992
+ board = Board(completed=[completed])
2993
+
2994
+ def _pr_lookup(repo_github, **kw):
2995
+ return {"number": 9, "url": "https://github.com/acme/api/pull/9", "existed": False}
2996
+
2997
+ opened = dispatch_pending_pr_opens(
2998
+ board, two_machine_config,
2999
+ pr_lookup=_pr_lookup,
3000
+ commits_ahead_checker=lambda repo, base, branch: 1,
3001
+ )
3002
+
3003
+ assert opened == [completed]
3004
+ assert completed.pr_url == "https://github.com/acme/api/pull/9"
3005
+
3006
+
3007
+ def test_dispatch_pending_pr_opens_skips_rows_that_already_have_a_pr(
3008
+ two_machine_config: Config,
3009
+ ) -> None:
3010
+ """A row that already carries pr_url is skipped — no redundant lookup."""
3011
+ from coord.review import dispatch_pending_pr_opens
3012
+
3013
+ completed = replace(_completed_assignment(), pr_url="https://github.com/acme/api/pull/1")
3014
+ board = Board(completed=[completed])
3015
+ calls = {"n": 0}
3016
+
3017
+ def _pr_lookup(repo_github, **kw):
3018
+ calls["n"] += 1
3019
+ return {"number": 1, "url": "u", "existed": True}
3020
+
3021
+ opened = dispatch_pending_pr_opens(board, two_machine_config, pr_lookup=_pr_lookup)
3022
+
3023
+ assert opened == []
3024
+ assert calls["n"] == 0
3025
+
3026
+
3027
+ def test_dispatch_pending_pr_opens_skips_failed_and_non_done_rows(
3028
+ two_machine_config: Config,
3029
+ ) -> None:
3030
+ """A failed work leg must never get an early-opened orphan PR (#2844's
3031
+ 'failed work legs' requirement) — only status='done' rows qualify."""
3032
+ from coord.review import dispatch_pending_pr_opens
3033
+
3034
+ failed = replace(_completed_assignment(), status="failed")
3035
+ running_like = replace(_completed_assignment(), status="running")
3036
+ no_branch = replace(_completed_assignment(), branch=None)
3037
+ board = Board(completed=[failed, running_like, no_branch])
3038
+ calls = {"n": 0}
3039
+
3040
+ def _pr_lookup(repo_github, **kw):
3041
+ calls["n"] += 1
3042
+ return {"number": 1, "url": "u", "existed": True}
3043
+
3044
+ opened = dispatch_pending_pr_opens(board, two_machine_config, pr_lookup=_pr_lookup)
3045
+
3046
+ assert opened == []
3047
+ assert calls["n"] == 0
3048
+
3049
+
3050
+ def test_dispatch_pending_pr_opens_skips_terminal_rows(
3051
+ two_machine_config: Config, monkeypatch,
3052
+ ) -> None:
3053
+ """#522-style chokepoint: never open a PR for work GitHub already
3054
+ considers finished (issue closed / PR merged)."""
3055
+ from coord.review import dispatch_pending_pr_opens
3056
+
3057
+ monkeypatch.setattr("coord.github_ops.work_is_terminal", lambda *a, **k: True)
3058
+ completed = _completed_assignment()
3059
+ board = Board(completed=[completed])
3060
+ calls = {"n": 0}
3061
+
3062
+ def _pr_lookup(repo_github, **kw):
3063
+ calls["n"] += 1
3064
+ return {"number": 1, "url": "u", "existed": True}
3065
+
3066
+ opened = dispatch_pending_pr_opens(board, two_machine_config, pr_lookup=_pr_lookup)
3067
+
3068
+ assert opened == []
3069
+ assert calls["n"] == 0
3070
+
3071
+
3072
+ def test_dispatch_pending_pr_opens_off_when_reviews_disabled(repo: Repo) -> None:
3073
+ """Gated on reviews.enabled/auto_dispatch — this path exists purely to
3074
+ feed dispatch_review's own PR lookup earlier, so it's a no-op when
3075
+ reviews are off entirely."""
3076
+ from coord.review import dispatch_pending_pr_opens
3077
+
3078
+ cfg = Config(
3079
+ repos=[repo],
3080
+ machines=[],
3081
+ reviews=ReviewsConfig(enabled=False, auto_dispatch=False),
3082
+ )
3083
+ completed = _completed_assignment()
3084
+ board = Board(completed=[completed])
3085
+ calls = {"n": 0}
3086
+
3087
+ def _pr_lookup(repo_github, **kw):
3088
+ calls["n"] += 1
3089
+ return {"number": 1, "url": "u", "existed": True}
3090
+
3091
+ opened = dispatch_pending_pr_opens(board, cfg, pr_lookup=_pr_lookup)
3092
+
3093
+ assert opened == []
3094
+ assert calls["n"] == 0
3095
+
3096
+
3097
+ def test_dispatch_pending_pr_opens_is_idempotent_with_dispatch_review(
3098
+ two_machine_config: Config,
3099
+ ) -> None:
3100
+ """Opening early and then reaching dispatch_review later must not create
3101
+ a second PR — both look the branch up fresh and get the same one back."""
3102
+ from coord.review import dispatch_pending_pr_opens
3103
+
3104
+ completed = replace(_completed_assignment(), review_state="pending")
3105
+ board = Board(completed=[completed])
3106
+ create_calls = {"n": 0}
3107
+
3108
+ def _find_or_create(repo_github, **kw):
3109
+ # Simulate GitHub: first call creates, every later call finds it.
3110
+ create_calls["n"] += 1
3111
+ existed = create_calls["n"] > 1
3112
+ return {"number": 123, "url": "https://github.com/acme/api/pull/123", "existed": existed}
3113
+
3114
+ opened = dispatch_pending_pr_opens(
3115
+ board, two_machine_config, pr_lookup=_find_or_create,
3116
+ )
3117
+ assert opened == [completed]
3118
+ assert create_calls["n"] == 1
3119
+
3120
+ result = dispatch_review(
3121
+ completed, board, two_machine_config,
3122
+ http_client=_FakeHTTPClient({"id": "review-id-late"}),
3123
+ pr_lookup=_find_or_create,
3124
+ claude_md_reader=lambda p: None,
3125
+ issue_body_fetcher=lambda repo, num: "",
3126
+ remote_branch_checker=lambda repo, branch: True,
3127
+ )
3128
+
3129
+ assert result is not None
3130
+ assert create_calls["n"] == 2, "dispatch_review must reuse the same PR, not create a new one"
3131
+
3132
+
2923
3133
  # ── Reviewer system prompt ──────────────────────────────────────────────────
2924
3134
 
2925
3135
 
@@ -635,6 +635,29 @@ class TestLocalMachine:
635
635
  monkeypatch.setattr("socket.gethostname", lambda: "nowhere")
636
636
  assert local_machine(self._config()) is None
637
637
 
638
+ def test_matches_by_machine_name_case_insensitively(self, monkeypatch) -> None:
639
+ # #2860: OS hostnames commonly carry capitals (e.g. an Ubuntu install
640
+ # named "john-HP-EliteBook-830-G7-Notebook-PC") while coordinator.yml
641
+ # conventionally lowercases `name`/`host` -- the match must not care.
642
+ monkeypatch.setattr("socket.gethostname", lambda: "LAPTOP")
643
+ cfg = self._config()
644
+ machine = local_machine(cfg)
645
+ assert machine is not None
646
+ assert machine.name == "laptop"
647
+
648
+ def test_matches_by_host_prefix_case_insensitively_with_fqdn(self, monkeypatch) -> None:
649
+ monkeypatch.setattr("socket.gethostname", lambda: "SERVER.Tail.TS.Net")
650
+ cfg = self._config()
651
+ machine = local_machine(cfg)
652
+ assert machine is not None
653
+ assert machine.name == "server"
654
+
655
+ def test_unlisted_hostname_still_returns_none(self, monkeypatch) -> None:
656
+ # A genuinely unrecognized hostname must keep failing closed even
657
+ # after casefolding both sides.
658
+ monkeypatch.setattr("socket.gethostname", lambda: "SOME-OTHER-BOX")
659
+ assert local_machine(self._config()) is None
660
+
638
661
  def test_find_local_repo_path_still_prefers_matching_machine(self, monkeypatch) -> None:
639
662
  # Regression: local_machine() extraction must not change
640
663
  # find_local_repo_path's existing preference behavior.
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.5.258",
3
- "distance": 0,
4
- "node": "gef4810f9d5759ef0c6af207cb768d16498aae9f4",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-27"
8
- }