code-coordinator 0.5.514__tar.gz → 0.5.516__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 (911) hide show
  1. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/SOURCES.txt +2 -0
  4. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/scm_file_list.json +2 -0
  5. code_coordinator-0.5.516/code_coordinator.egg-info/scm_version.json +8 -0
  6. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/ci_store.py +20 -5
  7. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/dispatch.py +9 -9
  8. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/release.py +8 -9
  9. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/sessions.py +21 -20
  10. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/terminal.py +19 -6
  11. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/config.py +203 -0
  12. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dashboard/server.py +3 -6
  13. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dashboard/terminal.py +4 -12
  14. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/diagnose.py +6 -10
  15. code_coordinator-0.5.516/coord/health/checks/local_machine_identity.py +97 -0
  16. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/interactive.py +13 -16
  17. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/merge_queue.py +18 -2
  18. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/models.py +7 -0
  19. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/service.py +22 -8
  20. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/revalidate.py +6 -11
  21. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/test_author.py +1 -1
  22. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/test_orchestrator.py +9 -13
  23. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/conftest.py +37 -0
  24. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ci_store.py +40 -0
  25. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config.py +281 -0
  26. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dashboard_terminal.py +10 -10
  27. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_gather_fleet_tmux_sessions.py +8 -2
  28. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_checks.py +67 -0
  29. code_coordinator-0.5.516/tests/test_interactive.py +153 -0
  30. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_session_relaunch.py +10 -10
  31. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_merge_queue.py +136 -0
  32. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reap_stale_interactive_tick.py +7 -5
  33. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_remote_interactive_reaper.py +1 -1
  34. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_smoke_live_checkout_restore.py +3 -3
  35. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_terminal_command.py +8 -2
  36. code_coordinator-0.5.514/code_coordinator.egg-info/scm_version.json +0 -8
  37. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.claude/commands/board.md +0 -0
  38. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.claude/commands/complete-session.md +0 -0
  39. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.claude/commands/coordinator.md +0 -0
  40. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.githooks/_lib.sh +0 -0
  41. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.githooks/post-checkout +0 -0
  42. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.githooks/post-commit +0 -0
  43. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.githooks/post-merge +0 -0
  44. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  45. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.github/coord-ci-acceptance.yml +0 -0
  46. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.github/workflows/auto-release.yml +0 -0
  47. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.github/workflows/publish.yml +0 -0
  48. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.github/workflows/test.yml +0 -0
  49. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/.gitignore +0 -0
  50. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/CLAUDE.md +0 -0
  51. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/GOAL.md +0 -0
  52. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/LICENSE +0 -0
  53. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/MANIFEST.in +0 -0
  54. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/README.md +0 -0
  55. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/dependency_links.txt +0 -0
  56. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/entry_points.txt +0 -0
  57. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/requires.txt +0 -0
  58. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/code_coordinator.egg-info/top_level.txt +0 -0
  59. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/__init__.py +0 -0
  60. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/_board_mapping.py +0 -0
  61. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/acceptance.py +0 -0
  62. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/acceptance_drivers.py +0 -0
  63. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/agent.py +0 -0
  64. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/agent_app.py +0 -0
  65. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/agent_update.py +0 -0
  66. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/agents/opencode/.gitignore +0 -0
  67. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/agents/opencode/agents/work.md +0 -0
  68. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/agents/opencode/routing.jsonc +0 -0
  69. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/approved_work.py +0 -0
  70. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/audit.py +0 -0
  71. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/auto_loop.py +0 -0
  72. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/backup.py +0 -0
  73. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/block_log.py +0 -0
  74. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/board_schema.py +0 -0
  75. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/board_service.py +0 -0
  76. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/board_wire.py +0 -0
  77. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/brain.py +0 -0
  78. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/branch_model.py +0 -0
  79. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/bug_intake.py +0 -0
  80. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/cargo_cache.py +0 -0
  81. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/ci_fix.py +0 -0
  82. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/ci_github.py +0 -0
  83. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/ci_gitlab.py +0 -0
  84. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/claim.py +0 -0
  85. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/claude_setup_token.py +0 -0
  86. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/cli.py +0 -0
  87. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/client.py +0 -0
  88. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/codegen.py +0 -0
  89. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/__init__.py +0 -0
  90. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/_common.py +0 -0
  91. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/acceptance.py +0 -0
  92. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/agent_ops.py +0 -0
  93. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/audit.py +0 -0
  94. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/backup.py +0 -0
  95. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/chat.py +0 -0
  96. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/ci.py +0 -0
  97. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/codegen.py +0 -0
  98. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/dispatch_workers.py +0 -0
  99. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/dr.py +0 -0
  100. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/drive.py +0 -0
  101. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/drive_queue.py +0 -0
  102. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/gate_a.py +0 -0
  103. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/gates.py +0 -0
  104. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/issues.py +0 -0
  105. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/lifecycle.py +0 -0
  106. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/machine.py +0 -0
  107. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/merge.py +0 -0
  108. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/milestone.py +0 -0
  109. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/plan_followup.py +0 -0
  110. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/plans.py +0 -0
  111. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/portal.py +0 -0
  112. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/pr.py +0 -0
  113. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/repo.py +0 -0
  114. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/report.py +0 -0
  115. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/review.py +0 -0
  116. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/scorecard.py +0 -0
  117. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/setup.py +0 -0
  118. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/status.py +0 -0
  119. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/store_migrate.py +0 -0
  120. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/test_gate.py +0 -0
  121. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/commands/tui.py +0 -0
  122. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/comments.py +0 -0
  123. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/config_reload.py +0 -0
  124. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/confirm_test.py +0 -0
  125. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/conflict_fix.py +0 -0
  126. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dao.py +0 -0
  127. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dashboard/__init__.py +0 -0
  128. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dashboard/fixture.py +0 -0
  129. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dashboard/index.html +0 -0
  130. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/db.py +0 -0
  131. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dead_end.py +0 -0
  132. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/decomposition_chat.py +0 -0
  133. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/README.md +0 -0
  134. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-agent.service +0 -0
  135. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-backup.service +0 -0
  136. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-backup.timer +0 -0
  137. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-db-backup.service +0 -0
  138. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-db-backup.sh +0 -0
  139. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-db-backup.timer +0 -0
  140. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-dr-verify.service +0 -0
  141. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-dr-verify.timer +0 -0
  142. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-drive-queue.service +0 -0
  143. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-drive-queue.timer +0 -0
  144. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-failure-notify.service +0 -0
  145. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-fleet-watchdog.service +0 -0
  146. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  147. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-notify.service +0 -0
  148. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-notify.timer +0 -0
  149. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-release-propagate.service +0 -0
  150. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-release-propagate.timer +0 -0
  151. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-release-window.service +0 -0
  152. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-release-window.timer +0 -0
  153. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-serve.service +0 -0
  154. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-web-dist-build.service +0 -0
  155. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-web-dist-build.timer +0 -0
  156. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy/coord-web.service +0 -0
  157. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy_manifest.py +0 -0
  158. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deploy_units.py +0 -0
  159. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deprecation_telemetry.py +0 -0
  160. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/deps.py +0 -0
  161. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dispatch.py +0 -0
  162. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dispatch_liveness.py +0 -0
  163. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dist_name.py +0 -0
  164. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dr_promote.py +0 -0
  165. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/dr_verify.py +0 -0
  166. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/drive.py +0 -0
  167. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/drive_queue.py +0 -0
  168. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/drive_sessions_snapshot.py +0 -0
  169. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/drive_state.py +0 -0
  170. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/events.py +0 -0
  171. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/failure_class.py +0 -0
  172. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/failure_classifier.py +0 -0
  173. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/filelock.py +0 -0
  174. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/fleet_config_health.py +0 -0
  175. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/forge_availability.py +0 -0
  176. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/freshness.py +0 -0
  177. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/gate_a.py +0 -0
  178. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/gate_b.py +0 -0
  179. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/gate_snapshot.py +0 -0
  180. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/gates.py +0 -0
  181. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/gen_board_fixture.py +0 -0
  182. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/github_ops.py +0 -0
  183. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/github_throttle.py +0 -0
  184. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/goal.py +0 -0
  185. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/graph_health.py +0 -0
  186. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/__init__.py +0 -0
  187. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/aggregate.py +0 -0
  188. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/__init__.py +0 -0
  189. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/_ci_pin.py +0 -0
  190. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/agent_install.py +0 -0
  191. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/cargo_targets.py +0 -0
  192. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/claude_binary.py +0 -0
  193. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/config_drift.py +0 -0
  194. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  195. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/coord_web_ci_pin.py +0 -0
  196. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/deploy_lane_facts.py +0 -0
  197. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/disk.py +0 -0
  198. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/fleet_board.py +0 -0
  199. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  200. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/fleet_phantom.py +0 -0
  201. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/fleet_unit_drift.py +0 -0
  202. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/graph.py +0 -0
  203. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/graphify_cli.py +0 -0
  204. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/index_lock.py +0 -0
  205. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/issues_sync_staleness.py +0 -0
  206. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/plan_usage.py +0 -0
  207. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/pr_churn.py +0 -0
  208. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/release_cordon.py +0 -0
  209. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/repo_state.py +0 -0
  210. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/spawned_coord.py +0 -0
  211. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/stalled_pipeline.py +0 -0
  212. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/timer_active.py +0 -0
  213. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/toolchain.py +0 -0
  214. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/unit_drift.py +0 -0
  215. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/unit_enablement.py +0 -0
  216. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/wedged_drive_queue.py +0 -0
  217. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/checks/worktrees.py +0 -0
  218. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/cli.py +0 -0
  219. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/context.py +0 -0
  220. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/fleet_snapshot.py +0 -0
  221. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/models.py +0 -0
  222. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/pypi.py +0 -0
  223. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/registry.py +0 -0
  224. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/render.py +0 -0
  225. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/health/units.py +0 -0
  226. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/hooks.py +0 -0
  227. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/housekeeping.py +0 -0
  228. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/invariant_alarms.py +0 -0
  229. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/issue_store.py +0 -0
  230. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/issues_sync_status.py +0 -0
  231. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/liveness_auditor.py +0 -0
  232. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/machine_fault.py +0 -0
  233. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/machine_metrics.py +0 -0
  234. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/machine_onboard.py +0 -0
  235. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/machine_pause.py +0 -0
  236. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/machine_stats.py +0 -0
  237. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/milestone_chat.py +0 -0
  238. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/milestone_dispatch.py +0 -0
  239. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/milestone_gate.py +0 -0
  240. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/milestone_order.py +0 -0
  241. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/mock_author.py +0 -0
  242. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/network.py +0 -0
  243. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/new_issue_chat.py +0 -0
  244. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/__init__.py +0 -0
  245. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/baseline.py +0 -0
  246. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/cli.py +0 -0
  247. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/collect.py +0 -0
  248. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/digest.py +0 -0
  249. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/models.py +0 -0
  250. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/predicate.py +0 -0
  251. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/store.py +0 -0
  252. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notifier/transport.py +0 -0
  253. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/notify.py +0 -0
  254. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/openapi.py +0 -0
  255. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/overlap_fence.py +0 -0
  256. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/overlap_predict.py +0 -0
  257. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/parentage.py +0 -0
  258. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/parentage_github.py +0 -0
  259. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/pipeline.py +0 -0
  260. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/plan_parser.py +0 -0
  261. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/plans.py +0 -0
  262. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/platform_paths.py +0 -0
  263. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/portal_bridge.py +0 -0
  264. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/portal_store.py +0 -0
  265. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/portal_sync.py +0 -0
  266. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/pr_body_lint.py +0 -0
  267. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/prereqs.py +0 -0
  268. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/progress.py +0 -0
  269. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/providers/__init__.py +0 -0
  270. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/providers/base.py +0 -0
  271. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/providers/claude.py +0 -0
  272. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/providers/claude_pty.py +0 -0
  273. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/providers/opencode.py +0 -0
  274. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/queue_diagnose.py +0 -0
  275. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/reconcile.py +0 -0
  276. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/reconcile_tick.py +0 -0
  277. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/refine_chat.py +0 -0
  278. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/release_cordon.py +0 -0
  279. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/release_propagate.py +0 -0
  280. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/release_verify.py +0 -0
  281. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/release_window.py +0 -0
  282. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/repo_dormancy.py +0 -0
  283. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/repo_edit.py +0 -0
  284. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/repo_onboard.py +0 -0
  285. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/reports.py +0 -0
  286. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/rest_schema.py +0 -0
  287. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/restart_cmd.py +0 -0
  288. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/review.py +0 -0
  289. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/scorecard.py +0 -0
  290. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/self_health.py +0 -0
  291. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/serve_app.py +0 -0
  292. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  293. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  294. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  295. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  296. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  297. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/portal-followup/SKILL.md +0 -0
  298. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/release-now/SKILL.md +0 -0
  299. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  300. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  301. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/skills/update-issue/SKILL.md +0 -0
  302. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/smoke.py +0 -0
  303. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/spend_ceiling.py +0 -0
  304. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/split_work.py +0 -0
  305. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/sql.py +0 -0
  306. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/stage_projection.py +0 -0
  307. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/state.py +0 -0
  308. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/store_migrate.py +0 -0
  309. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/store_parity.py +0 -0
  310. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/templates/deploy-cloudflare.node.yml +0 -0
  311. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/test_chat.py +0 -0
  312. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/test_report.py +0 -0
  313. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/tui_release.py +0 -0
  314. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/uat_checks.py +0 -0
  315. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/usage.py +0 -0
  316. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/usage_limits.py +0 -0
  317. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/usage_rollup.py +0 -0
  318. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coord/worker_events.py +0 -0
  319. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/coordinator.example.yml +0 -0
  320. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-agent.service +0 -0
  321. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-backup.service +0 -0
  322. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-backup.timer +0 -0
  323. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-db-backup.service +0 -0
  324. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-db-backup.sh +0 -0
  325. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-db-backup.timer +0 -0
  326. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-dr-verify.service +0 -0
  327. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-dr-verify.timer +0 -0
  328. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-drive-queue.service +0 -0
  329. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-drive-queue.timer +0 -0
  330. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-failure-notify.service +0 -0
  331. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-failure-notify.sh +0 -0
  332. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-fleet-watchdog.service +0 -0
  333. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-fleet-watchdog.timer +0 -0
  334. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-notify.service +0 -0
  335. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-notify.timer +0 -0
  336. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-release-propagate.service +0 -0
  337. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-release-propagate.timer +0 -0
  338. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-release-window.service +0 -0
  339. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-release-window.timer +0 -0
  340. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-serve.service +0 -0
  341. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-web-dist-build.service +0 -0
  342. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-web-dist-build.sh +0 -0
  343. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-web-dist-build.timer +0 -0
  344. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-web-rollback.sh +0 -0
  345. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/coord-web.service +0 -0
  346. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/deploy/node-shim.sh +0 -0
  347. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ADR_COORD_TUI_CI.md +0 -0
  348. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  349. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ADR_COORD_WEB_CI.md +0 -0
  350. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ADR_COORD_WEB_DIST.md +0 -0
  351. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  352. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/AGENT_OPERATIONS.md +0 -0
  353. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ARCHITECTURE.md +0 -0
  354. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ARCH_SECURITY_GATES.md +0 -0
  355. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/COCKPIT.md +0 -0
  356. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/CONTROL_CENTER.md +0 -0
  357. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/COST_DISCIPLINE.md +0 -0
  358. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/CROSS_PLATFORM.md +0 -0
  359. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/CUSTOMER_FACING_APPS.md +0 -0
  360. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/CUSTOMER_PORTAL.md +0 -0
  361. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/DATA_STORE_SELECTION.md +0 -0
  362. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/DISASTER_RECOVERY.md +0 -0
  363. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/DRIVE_QUEUE.md +0 -0
  364. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/EPHEMERAL_WORKERS.md +0 -0
  365. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/FORGE_MIGRATION.md +0 -0
  366. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/GRAPHIFY_SETUP.md +0 -0
  367. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ISSUE_GUIDANCE.md +0 -0
  368. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/MAC_MINI.md +0 -0
  369. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  370. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/NOTIFIER.md +0 -0
  371. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/OPENCODE_VERIFICATION.md +0 -0
  372. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/OPERATING_GOTCHAS.md +0 -0
  373. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/OPERATOR_GUIDES.md +0 -0
  374. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/ORACLE_LOOP.md +0 -0
  375. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/PHONE_WEBAPP.md +0 -0
  376. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/PIPELINE_V2.md +0 -0
  377. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/PLATFORM_EVOLUTION.md +0 -0
  378. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/SECOND_BACKEND.md +0 -0
  379. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/STORE_SERVICE.md +0 -0
  380. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  381. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/WEB_CONTROL_CENTER.md +0 -0
  382. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/WSL_WINDOWS_WORKER.md +0 -0
  383. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/mocks/web/README.md +0 -0
  384. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/mocks/web/_tokens.css +0 -0
  385. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/mocks/web/issue-detail.html +0 -0
  386. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/mocks/web/pipeline-narrow.html +0 -0
  387. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/docs/mocks/web/pipeline-wide.html +0 -0
  388. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/graphify-out/.gitignore +0 -0
  389. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/install-agent.sh +0 -0
  390. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/pyproject.toml +0 -0
  391. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/audit_review_verdict_overrides.py +0 -0
  392. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  393. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/build-worker-image.sh +0 -0
  394. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/coordinator-machine.py +0 -0
  395. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/dr-down.sh +0 -0
  396. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/dr-up.sh +0 -0
  397. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/epic-down.sh +0 -0
  398. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/epic-up.sh +0 -0
  399. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/preflight.sh +0 -0
  400. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/provision-server.sh +0 -0
  401. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/provision-worker.sh +0 -0
  402. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  403. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  404. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/throwaway-vm.sh +0 -0
  405. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/azure-workers/verify-github-token.sh +0 -0
  406. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/check_gh_argv_containment.py +0 -0
  407. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/codegen.py +0 -0
  408. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/coord-test-runner.sh +0 -0
  409. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  410. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  411. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  412. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  413. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/coord-venv-rollback.sh +0 -0
  414. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/drive-batch.sh +0 -0
  415. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/extract-coord-tui.sh +0 -0
  416. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/fleet_watchdog.py +0 -0
  417. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/gen_board_fixture.py +0 -0
  418. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/gen_mock_index.py +0 -0
  419. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/lib/provision-core.sh +0 -0
  420. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/next_release_tag.py +0 -0
  421. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/provision-machine.sh +0 -0
  422. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/run_tests_in_populated_home.sh +0 -0
  423. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/run_tests_without_gh.sh +0 -0
  424. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/setup-macmini.sh +0 -0
  425. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/smoke_437_interactive.py +0 -0
  426. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/verify-provision-noble.sh +0 -0
  427. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/verify_878_review_capture.py +0 -0
  428. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/verify_release_published.py +0 -0
  429. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/scripts/verify_release_wheel.py +0 -0
  430. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/setup.cfg +0 -0
  431. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/SMOKE_SET.md +0 -0
  432. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/__init__.py +0 -0
  433. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-37/conftest.py +0 -0
  434. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-37/contract.md +0 -0
  435. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-37/manifest.yml +0 -0
  436. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  437. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  438. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-51/contract.md +0 -0
  439. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  440. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  441. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-51/manifest.yml +0 -0
  442. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  443. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-51/tsconfig.json +0 -0
  444. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  445. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/backends.py +0 -0
  446. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/board-pipeline-basic.json +0 -0
  447. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  448. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  449. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  450. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  451. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/all_pass.json +0 -0
  452. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  453. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/mixed_fail.json +0 -0
  454. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  455. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  456. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/skip.json +0 -0
  457. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/playwright/truncated.json +0 -0
  458. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  459. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  460. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  461. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  462. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  463. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  464. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  465. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  466. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_acceptance.py +0 -0
  467. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_acceptance_drivers.py +0 -0
  468. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent.py +0 -0
  469. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_api_error.py +0 -0
  470. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_app.py +0 -0
  471. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_branch_base.py +0 -0
  472. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_branch_capture.py +0 -0
  473. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_config_free_1712.py +0 -0
  474. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_deploy_units_endpoint.py +0 -0
  475. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_dirty_worktree.py +0 -0
  476. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  477. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_graph_self_heal.py +0 -0
  478. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_health_h3.py +0 -0
  479. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_idle_restart.py +0 -0
  480. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_push_failure.py +0 -0
  481. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_reap.py +0 -0
  482. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_repos_and_pull.py +0 -0
  483. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_restart_services_endpoint.py +0 -0
  484. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_skills_self_heal.py +0 -0
  485. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_startup_diagnostics.py +0 -0
  486. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_update.py +0 -0
  487. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_update_bluegreen.py +0 -0
  488. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_usage_limit.py +0 -0
  489. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_agent_zero_commit.py +0 -0
  490. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ambient_home_isolation.py +0 -0
  491. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_approve_capability_reroute_3241.py +0 -0
  492. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_approve_dependency_busy_2804.py +0 -0
  493. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_approve_reject_plan.py +0 -0
  494. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_approve_usage_gate.py +0 -0
  495. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_approved_work_2532.py +0 -0
  496. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_approved_work_2996.py +0 -0
  497. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_assignment_already_recorded_daemon.py +0 -0
  498. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_audit_log.py +0 -0
  499. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_audit_outcome.py +0 -0
  500. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_audit_query.py +0 -0
  501. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_auto_loop.py +0 -0
  502. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_auto_release_publish_2035.py +0 -0
  503. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_backend_selection.py +0 -0
  504. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_backup.py +0 -0
  505. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_base_checkout_restore.py +0 -0
  506. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_block_log.py +0 -0
  507. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_cap_762.py +0 -0
  508. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_fixture.py +0 -0
  509. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_read_path.py +0 -0
  510. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_schema.py +0 -0
  511. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_service.py +0 -0
  512. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_state.py +0 -0
  513. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_board_wire.py +0 -0
  514. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_brain.py +0 -0
  515. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_branch_model.py +0 -0
  516. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_bug_intake.py +0 -0
  517. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_build_worker_image_env_update.py +0 -0
  518. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cargo_cache.py +0 -0
  519. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_check_gh_argv_containment.py +0 -0
  520. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ci_acceptance_gate_1950.py +0 -0
  521. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ci_fix.py +0 -0
  522. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ci_github.py +0 -0
  523. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ci_gitlab.py +0 -0
  524. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_ci_parity_2091.py +0 -0
  525. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_claim.py +0 -0
  526. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_claude_md_budget.py +0 -0
  527. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_claude_setup_token.py +0 -0
  528. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_acceptance.py +0 -0
  529. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_assign.py +0 -0
  530. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  531. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_assign_interactive_remote.py +0 -0
  532. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_assign_provider.py +0 -0
  533. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  534. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_audit.py +0 -0
  535. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_chat_continue.py +0 -0
  536. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_ci.py +0 -0
  537. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_codegen.py +0 -0
  538. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_decide.py +0 -0
  539. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_diagnose_capability_rules.py +0 -0
  540. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_diagnose_config_provenance.py +0 -0
  541. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_diagnose_forge_availability.py +0 -0
  542. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_diagnose_graph.py +0 -0
  543. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_diagnose_self.py +0 -0
  544. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_diagnose_test_coverage.py +0 -0
  545. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_doctor.py +0 -0
  546. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_doctor_config_free_1801.py +0 -0
  547. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  548. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  549. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_drive.py +0 -0
  550. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_drive_queue.py +0 -0
  551. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_escalate.py +0 -0
  552. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_fix_headless_review.py +0 -0
  553. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_gate_a.py +0 -0
  554. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_install_drift.py +0 -0
  555. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_install_skills.py +0 -0
  556. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_issue_comment.py +0 -0
  557. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_issue_create_label.py +0 -0
  558. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_issue_reopen.py +0 -0
  559. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_issue_view_list.py +0 -0
  560. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_issues.py +0 -0
  561. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_merge.py +0 -0
  562. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_assign.py +0 -0
  563. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_capture.py +0 -0
  564. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_chat_add_child.py +0 -0
  565. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_dispatch.py +0 -0
  566. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_gate_b.py +0 -0
  567. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_gate_c.py +0 -0
  568. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_order.py +0 -0
  569. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  570. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_milestone_ship.py +0 -0
  571. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_network.py +0 -0
  572. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_new_issue_chat.py +0 -0
  573. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_plans.py +0 -0
  574. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_portal.py +0 -0
  575. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_pr.py +0 -0
  576. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_pull_artifact.py +0 -0
  577. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_queue.py +0 -0
  578. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_reattach_sessions.py +0 -0
  579. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_refine_board.py +0 -0
  580. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_release_preflight.py +0 -0
  581. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_release_propagate.py +0 -0
  582. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_release_window.py +0 -0
  583. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_repo_2220.py +0 -0
  584. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  585. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_scorecard.py +0 -0
  586. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_serve_store_backend_3084.py +0 -0
  587. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_set_review_findings.py +0 -0
  588. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_advisory_terminal.py +0 -0
  589. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_contested_tag.py +0 -0
  590. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_invariant_alarms.py +0 -0
  591. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_machine_fault.py +0 -0
  592. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_merge_queue.py +0 -0
  593. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_provider.py +0 -0
  594. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_retried_3340.py +0 -0
  595. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_review_finalizing.py +0 -0
  596. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_supervisor_3366.py +0 -0
  597. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_test_failed_tag.py +0 -0
  598. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_status_usage_limit.py +0 -0
  599. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_sync_comments_873.py +0 -0
  600. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_test_plan.py +0 -0
  601. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_track.py +0 -0
  602. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_tui_update.py +0 -0
  603. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cli_wait.py +0 -0
  604. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_client.py +0 -0
  605. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_client_base_install.py +0 -0
  606. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_client_config_cache_atomic_3052.py +0 -0
  607. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_client_resource_migration_1946.py +0 -0
  608. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_commands_common.py +0 -0
  609. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_comments.py +0 -0
  610. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_completion_summary.py +0 -0
  611. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_acceptance.py +0 -0
  612. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_audit.py +0 -0
  613. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_drift_check.py +0 -0
  614. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_effective.py +0 -0
  615. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_pricing.py +0 -0
  616. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  617. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_config_usage_gate.py +0 -0
  618. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_confirm_test.py +0 -0
  619. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_conflict_fix.py +0 -0
  620. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_conflict_fix_semantic.py +0 -0
  621. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  622. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_test.py +0 -0
  623. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  624. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_test_runner_baseline.py +0 -0
  625. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_test_runner_populated_home.py +0 -0
  626. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_test_runner_routing.py +0 -0
  627. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_test_runner_toolchain.py +0 -0
  628. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_uat.py +0 -0
  629. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coord_web_sse_restart_live.py +0 -0
  630. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_coordinator_machine.py +0 -0
  631. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_cross_platform_imports.py +0 -0
  632. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dao.py +0 -0
  633. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dashboard.py +0 -0
  634. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dashboard_api.py +0 -0
  635. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dashboard_fixture.py +0 -0
  636. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dashboard_server.py +0 -0
  637. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dashboard_terminal_live.py +0 -0
  638. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_db.py +0 -0
  639. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dead_end.py +0 -0
  640. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_decomposition_chat.py +0 -0
  641. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_coord_db_backup.py +0 -0
  642. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_coord_web_dist.py +0 -0
  643. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_coord_web_rollback.py +0 -0
  644. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_db_backup_unit.py +0 -0
  645. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_drive_queue_unit.py +0 -0
  646. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_failure_notify_unit.py +0 -0
  647. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_manifest.py +0 -0
  648. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_notify_unit.py +0 -0
  649. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_units_lane.py +0 -0
  650. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deploy_web_unit.py +0 -0
  651. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deprecation_telemetry.py +0 -0
  652. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_deps.py +0 -0
  653. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_diagnose.py +0 -0
  654. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dispatch.py +0 -0
  655. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dispatch_liveness.py +0 -0
  656. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dispatch_target_validation.py +0 -0
  657. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dispatch_workers.py +0 -0
  658. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dist_name.py +0 -0
  659. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_done_housekeeping.py +0 -0
  660. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dr_azure_scripts.py +0 -0
  661. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dr_promote.py +0 -0
  662. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_dr_verify.py +0 -0
  663. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive.py +0 -0
  664. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_machine_fault.py +0 -0
  665. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue.py +0 -0
  666. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue_blocked_rendering.py +0 -0
  667. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue_launch_argv.py +0 -0
  668. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue_max_parallel_config.py +0 -0
  669. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  670. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue_roll_pending.py +0 -0
  671. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  672. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_sessions_snapshot.py +0 -0
  673. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_state.py +0 -0
  674. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_drive_tmux.py +0 -0
  675. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_epic_up_capability_detection.py +0 -0
  676. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  677. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_epic_up_image_provenance.py +0 -0
  678. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_errors.py +0 -0
  679. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_events.py +0 -0
  680. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_failure_class.py +0 -0
  681. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_failure_classifier.py +0 -0
  682. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_filelock.py +0 -0
  683. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  684. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_fix_escalation_classifier.py +0 -0
  685. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_fix_of_force_override.py +0 -0
  686. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_fleet_config_health.py +0 -0
  687. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_fleet_health_probes.py +0 -0
  688. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_fleet_health_snapshot.py +0 -0
  689. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_fleet_watchdog.py +0 -0
  690. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_forge_availability.py +0 -0
  691. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_freshness.py +0 -0
  692. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_gate_a.py +0 -0
  693. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_gate_b.py +0 -0
  694. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_gate_snapshot_staleness.py +0 -0
  695. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_gates.py +0 -0
  696. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_gen_mock_index.py +0 -0
  697. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_generated_rust_fixture.py +0 -0
  698. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_generated_rust_requests.py +0 -0
  699. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_generated_types_fixture.py +0 -0
  700. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_github_ops.py +0 -0
  701. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_github_throttle.py +0 -0
  702. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_goal.py +0 -0
  703. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_graph_health.py +0 -0
  704. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_graph_selfheal_absent_2237.py +0 -0
  705. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_handoff.py +0 -0
  706. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_cli.py +0 -0
  707. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_cli_graph.py +0 -0
  708. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_config.py +0 -0
  709. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_context.py +0 -0
  710. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_coord_tui_ci_pin.py +0 -0
  711. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_coord_web_ci_pin.py +0 -0
  712. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_deploy_lane_facts.py +0 -0
  713. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_fix.py +0 -0
  714. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_incident_regression.py +0 -0
  715. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_issues_sync_staleness.py +0 -0
  716. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_pr_churn.py +0 -0
  717. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_pypi.py +0 -0
  718. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_registry.py +0 -0
  719. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_release_cordon_probe.py +0 -0
  720. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_timer_active.py +0 -0
  721. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_toolchain.py +0 -0
  722. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_unit_drift.py +0 -0
  723. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_unit_enablement.py +0 -0
  724. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_health_wedged_drive_queue.py +0 -0
  725. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_hooks.py +0 -0
  726. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_housekeeping.py +0 -0
  727. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_human_attended_437.py +0 -0
  728. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_init.py +0 -0
  729. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_install_agent_venv_2911.py +0 -0
  730. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_integration.py +0 -0
  731. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_briefing_echo.py +0 -0
  732. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_pane_log_2541.py +0 -0
  733. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_prefill_state.py +0 -0
  734. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_test_verdict_backstop.py +0 -0
  735. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_token_attribution.py +0 -0
  736. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_interactive_worktree.py +0 -0
  737. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_invariant_alarms.py +0 -0
  738. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_issue_store_seam.py +0 -0
  739. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_issues_sync_status.py +0 -0
  740. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_liveness_auditor.py +0 -0
  741. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_liveness_notify.py +0 -0
  742. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_lock_contention_ratchet.py +0 -0
  743. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_machine_fault.py +0 -0
  744. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_machine_metrics.py +0 -0
  745. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_machine_onboard.py +0 -0
  746. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_machine_pause.py +0 -0
  747. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_machine_stats.py +0 -0
  748. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_merge_verify.py +0 -0
  749. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_milestone_chat.py +0 -0
  750. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_milestone_dispatch.py +0 -0
  751. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_milestone_gate.py +0 -0
  752. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_milestone_order.py +0 -0
  753. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_milestone_seam.py +0 -0
  754. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_mock_author.py +0 -0
  755. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_model_tiering.py +0 -0
  756. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_models.py +0 -0
  757. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_models_config_labels.py +0 -0
  758. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_needs_attention.py +0 -0
  759. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_network.py +0 -0
  760. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_new_issue_chat.py +0 -0
  761. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_next_release_tag.py +0 -0
  762. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_node_shim.py +0 -0
  763. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_baseline.py +0 -0
  764. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_cli.py +0 -0
  765. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_collect.py +0 -0
  766. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_config.py +0 -0
  767. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_drive_seam.py +0 -0
  768. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_isolation.py +0 -0
  769. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_predicate.py +0 -0
  770. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_quiet_hours.py +0 -0
  771. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notifier_service.py +0 -0
  772. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notify.py +0 -0
  773. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_notify_drain.py +0 -0
  774. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_openapi.py +0 -0
  775. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_operational_defaults.py +0 -0
  776. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_overlap_fence.py +0 -0
  777. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_overlap_predict.py +0 -0
  778. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_packaged_deploy_units.py +0 -0
  779. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_parentage.py +0 -0
  780. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_paste_landed.py +0 -0
  781. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  782. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_pipeline.py +0 -0
  783. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_plan_followup_approve_plan_command.py +0 -0
  784. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_plan_followup_pr_command.py +0 -0
  785. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_plan_followup_review_command.py +0 -0
  786. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_plan_only.py +0 -0
  787. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_plan_parser.py +0 -0
  788. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_platform_paths.py +0 -0
  789. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_portal_bridge.py +0 -0
  790. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_portal_config.py +0 -0
  791. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_portal_store.py +0 -0
  792. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_portal_sync.py +0 -0
  793. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_pr_body_lint.py +0 -0
  794. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_prereqs.py +0 -0
  795. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_production_db_guard.py +0 -0
  796. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_progress.py +0 -0
  797. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_provider_seam.py +0 -0
  798. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_providers.py +0 -0
  799. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_providers_config_labels.py +0 -0
  800. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_providers_pty.py +0 -0
  801. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_provision_core.py +0 -0
  802. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_provision_machine.py +0 -0
  803. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_py_rust_mirror_inventory.py +0 -0
  804. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_quiet_hours.py +0 -0
  805. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_quiet_hours_store_2146.py +0 -0
  806. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reap_merged_sessions.py +0 -0
  807. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile.py +0 -0
  808. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_branch.py +0 -0
  809. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_completions.py +0 -0
  810. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  811. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_merges.py +0 -0
  812. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_no_agent_record.py +0 -0
  813. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_tick.py +0 -0
  814. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reconcile_usage_limit_done.py +0 -0
  815. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_refine_chat.py +0 -0
  816. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_cordon_2101.py +0 -0
  817. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  818. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_cordon_deadlock_2240.py +0 -0
  819. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  820. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_cordon_stuck_2490.py +0 -0
  821. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_propagate.py +0 -0
  822. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_propagate_threshold.py +0 -0
  823. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_roll_between_legs_2854.py +0 -0
  824. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_roll_window_handoff.py +0 -0
  825. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_unified_1242.py +0 -0
  826. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_verify.py +0 -0
  827. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_release_window.py +0 -0
  828. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_remote_auto_prune.py +0 -0
  829. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_repo_add.py +0 -0
  830. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_repo_dormancy.py +0 -0
  831. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_repo_edit_2220.py +0 -0
  832. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_repo_graph_fleet_2237.py +0 -0
  833. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_repo_max_parallel_3423.py +0 -0
  834. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_repo_onboard_2220.py +0 -0
  835. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_report_result_push.py +0 -0
  836. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_reports.py +0 -0
  837. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_restart_cmd.py +0 -0
  838. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_retry.py +0 -0
  839. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_retry_advisory_1606.py +0 -0
  840. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_retry_escalation_classify_3360.py +0 -0
  841. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_retry_type_1636.py +0 -0
  842. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_revalidate.py +0 -0
  843. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review.py +0 -0
  844. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_end_review_without_verdict.py +0 -0
  845. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_parse_failure_diagnostic.py +0 -0
  846. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_reaffirm.py +0 -0
  847. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_state.py +0 -0
  848. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_verdict_backstop.py +0 -0
  849. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_verdict_override_audit.py +0 -0
  850. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_verdict_relay.py +0 -0
  851. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_review_zero_commits.py +0 -0
  852. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_scoped_review_wiring.py +0 -0
  853. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_scorecard.py +0 -0
  854. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_self_health.py +0 -0
  855. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_serve.py +0 -0
  856. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_serve_app.py +0 -0
  857. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_serve_app_board_trim.py +0 -0
  858. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_serve_rest_routes.py +0 -0
  859. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_session.py +0 -0
  860. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_slice_issue_attribution.py +0 -0
  861. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_smoke.py +0 -0
  862. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  863. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_smoke_workflow.py +0 -0
  864. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_spend_ceiling.py +0 -0
  865. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_spend_ceiling_coordinator.py +0 -0
  866. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_split.py +0 -0
  867. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_split_work.py +0 -0
  868. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_sql_dialect.py +0 -0
  869. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_sqlite_connect_ratchet.py +0 -0
  870. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_stage_projection.py +0 -0
  871. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_stale_busy_reviewer_697.py +0 -0
  872. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_stalled_pipeline.py +0 -0
  873. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_state.py +0 -0
  874. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_state_review_findings_daemon.py +0 -0
  875. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_status_fleet_footer.py +0 -0
  876. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_stop_1567.py +0 -0
  877. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_store_contract.py +0 -0
  878. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_store_migrate.py +0 -0
  879. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_stuck.py +0 -0
  880. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  881. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_test_author.py +0 -0
  882. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_test_chat.py +0 -0
  883. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_test_orchestrator.py +0 -0
  884. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_test_report.py +0 -0
  885. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_test_verdict_parsing.py +0 -0
  886. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_test_verdict_transcript_floor.py +0 -0
  887. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_text_io_encoding_audit.py +0 -0
  888. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_thin_client_board_audit.py +0 -0
  889. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_thin_client_config_load_1080.py +0 -0
  890. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_thin_client_daemon_routing_906.py +0 -0
  891. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_throwaway_vm.py +0 -0
  892. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_tmux_host.py +0 -0
  893. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_tmux_session.py +0 -0
  894. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_transcript_floor.py +0 -0
  895. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_uat_checks.py +0 -0
  896. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_usage.py +0 -0
  897. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_usage_limits.py +0 -0
  898. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_usage_rollup.py +0 -0
  899. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_venv_live_install_2121.py +0 -0
  900. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_version_single_source.py +0 -0
  901. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_watch.py +0 -0
  902. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  903. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worker_env_venv_isolation.py +0 -0
  904. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worker_events.py +0 -0
  905. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worker_image_pin_sync.py +0 -0
  906. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worker_safety.py +0 -0
  907. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worker_test_scoping.py +0 -0
  908. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worktree.py +0 -0
  909. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  910. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/test_write_parity.py +0 -0
  911. {code_coordinator-0.5.514 → code_coordinator-0.5.516}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.514
3
+ Version: 0.5.516
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.514
3
+ Version: 0.5.516
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
@@ -265,6 +265,7 @@ coord/health/checks/graph.py
265
265
  coord/health/checks/graphify_cli.py
266
266
  coord/health/checks/index_lock.py
267
267
  coord/health/checks/issues_sync_staleness.py
268
+ coord/health/checks/local_machine_identity.py
268
269
  coord/health/checks/plan_usage.py
269
270
  coord/health/checks/pr_churn.py
270
271
  coord/health/checks/release_cordon.py
@@ -685,6 +686,7 @@ tests/test_human_attended_437.py
685
686
  tests/test_init.py
686
687
  tests/test_install_agent_venv_2911.py
687
688
  tests/test_integration.py
689
+ tests/test_interactive.py
688
690
  tests/test_interactive_briefing_echo.py
689
691
  tests/test_interactive_pane_log_2541.py
690
692
  tests/test_interactive_prefill_state.py
@@ -174,6 +174,7 @@
174
174
  "coord/health/checks/graphify_cli.py",
175
175
  "coord/health/checks/index_lock.py",
176
176
  "coord/health/checks/issues_sync_staleness.py",
177
+ "coord/health/checks/local_machine_identity.py",
177
178
  "coord/health/checks/plan_usage.py",
178
179
  "coord/health/checks/pr_churn.py",
179
180
  "coord/health/checks/release_cordon.py",
@@ -711,6 +712,7 @@
711
712
  "tests/test_init.py",
712
713
  "tests/test_install_agent_venv_2911.py",
713
714
  "tests/test_integration.py",
715
+ "tests/test_interactive.py",
714
716
  "tests/test_interactive_briefing_echo.py",
715
717
  "tests/test_interactive_pane_log_2541.py",
716
718
  "tests/test_interactive_prefill_state.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.5.516",
3
+ "distance": 0,
4
+ "node": "g19a9eb87ca92b056b9d5bfed8273bb8f83a30fa0",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-24"
8
+ }
@@ -539,6 +539,25 @@ CI_RERUN_POLL_INTERVAL_SECONDS = 10.0
539
539
  CI_RERUN_MAX_WAIT_SECONDS = 360.0
540
540
 
541
541
 
542
+ def is_unreadable_check_name(name: str) -> bool:
543
+ """The name-only half of :func:`is_unreadable_check` (#3438).
544
+
545
+ Split out so a caller holding only a bare check *name* — not a full
546
+ ``CheckRun`` with a ``.conclusion`` — can still recognize the #1525
547
+ synthetic stand-in. This is exactly the shape of
548
+ ``QueuedMerge.ci_seen_check_names_json`` (:mod:`coord.merge_queue`'s
549
+ #3263 shrinkage guard persists names, not whole ``CheckRun`` objects),
550
+ so a row poisoned before #3438's write-side fix — one whose stored JSON
551
+ already contains a synthetic name — can be filtered on *read* too,
552
+ recovering in place rather than needing manual DB repair.
553
+
554
+ One question, one answer: :func:`is_unreadable_check` delegates here for
555
+ its own name check rather than re-deriving the same prefix/substring
556
+ test, so the two can never drift apart.
557
+ """
558
+ return name.startswith("coord: ") and "read CI status" in name
559
+
560
+
542
561
  def is_unreadable_check(check) -> bool:
543
562
  """True for the #1525 synthetic "could not read CI status" / "gh too
544
563
  old" stand-ins (``coord.ci_github._unreadable_check`` /
@@ -570,11 +589,7 @@ def is_unreadable_check(check) -> bool:
570
589
  than the prose these three call sites already commit to.
571
590
  """
572
591
  name = str(getattr(check, "name", ""))
573
- return (
574
- getattr(check, "conclusion", None) == "unknown"
575
- and name.startswith("coord: ")
576
- and "read CI status" in name
577
- )
592
+ return getattr(check, "conclusion", None) == "unknown" and is_unreadable_check_name(name)
578
593
 
579
594
 
580
595
  @dataclass
@@ -6,7 +6,6 @@ Extracted from coord/cli.py (#747)."""
6
6
  from __future__ import annotations
7
7
 
8
8
  import dataclasses
9
- import socket
10
9
  import sys
11
10
  from pathlib import Path
12
11
  from typing import TYPE_CHECKING
@@ -1498,7 +1497,7 @@ def assign(
1498
1497
  if interactive:
1499
1498
  setup = _build_interactive_launch_setup(
1500
1499
  machine=machine, repo=repo, issue=issue, machine_obj=machine_obj,
1501
- dry_run=dry_run,
1500
+ dry_run=dry_run, config=cfg,
1502
1501
  )
1503
1502
  provider = setup.provider
1504
1503
  _is_local = setup.is_local
@@ -1635,6 +1634,7 @@ def _build_interactive_launch_setup(
1635
1634
  issue: int,
1636
1635
  machine_obj: object,
1637
1636
  dry_run: bool,
1637
+ config: object,
1638
1638
  ) -> _InteractiveLaunchSetup:
1639
1639
  # #2086: the authoritative gate — see _require_interactive_tty's
1640
1640
  # docstring. Every --interactive flavour in BOTH callers (assign()'s
@@ -1668,13 +1668,13 @@ def _build_interactive_launch_setup(
1668
1668
  )
1669
1669
 
1670
1670
  # Detect whether the target machine is the local machine so we can
1671
- # choose the local TTY path vs the remote SSH+tmux path (#494).
1672
- # Mirrors the hostname-matching logic in _save_config_snapshot.
1673
- _local_hn = socket.gethostname().split(".")[0].lower()
1674
- _is_local = (
1675
- machine_obj.name.lower() == _local_hn
1676
- or machine_obj.host.split(".")[0].lower() == _local_hn
1677
- )
1671
+ # choose the local TTY path vs the remote SSH+tmux path (#494). Routed
1672
+ # through the single shared resolver (#3440) — alias list, Tailscale
1673
+ # identity, then hostname fallback, not a private hostname comparison.
1674
+ from coord.config import resolve_local_machine # noqa: PLC0415
1675
+
1676
+ _resolved_local = resolve_local_machine(config)
1677
+ _is_local = _resolved_local is not None and _resolved_local.name == machine_obj.name
1678
1678
 
1679
1679
  # #590/#749: on a thin client the local board/DB is empty, so resolve the
1680
1680
  # interactive-launch target (--review-of/--fix-of/--rework-of/--smoke-of/
@@ -2461,16 +2461,15 @@ def _uncordon_hosts(hosts: list[str], journal: dict, *, quiet: bool = False) ->
2461
2461
 
2462
2462
 
2463
2463
  def _local_machine_name(config) -> str | None:
2464
- """This host's name in ``coordinator.yml``, if it is in there at all."""
2465
- import socket # noqa: PLC0415
2464
+ """This host's name in ``coordinator.yml``, if it is in there at all.
2466
2465
 
2467
- here = socket.gethostname().split(".")[0].lower()
2468
- for machine in getattr(config, "machines", ()) or ():
2469
- if machine.name.lower() == here:
2470
- return machine.name
2471
- if str(getattr(machine, "host", "")).split(".")[0].lower() == here:
2472
- return machine.name
2473
- return None
2466
+ Routes through :func:`coord.config.resolve_local_machine` (#3440) rather
2467
+ than a private hostname comparison — "one question, one answer".
2468
+ """
2469
+ from coord.config import resolve_local_machine # noqa: PLC0415
2470
+
2471
+ resolved = resolve_local_machine(config)
2472
+ return resolved.name if resolved is not None else None
2474
2473
 
2475
2474
 
2476
2475
  def _roll_python(machine, *, target_version: str, agent_port: int, timeout: float,
@@ -6,7 +6,6 @@ from __future__ import annotations
6
6
  import fnmatch
7
7
  import os
8
8
  import shutil
9
- import socket
10
9
  import subprocess
11
10
  import sys
12
11
  import time
@@ -561,11 +560,10 @@ def pull_artifact(
561
560
  # rsync-over-ssh to our own hostname FAILS ("Permission denied" — no
562
561
  # self-ssh key), which surfaced as a meaningless pull error in the TUI.
563
562
  # Copy locally if the destination differs; otherwise it is a no-op.
564
- local_hostname = socket.gethostname().split(".")[0].lower()
565
- is_local = (
566
- machine.name.lower() == local_hostname
567
- or machine.host.split(".")[0].lower() == local_hostname
568
- )
563
+ from coord.config import resolve_local_machine # noqa: PLC0415
564
+
565
+ _resolved_local = resolve_local_machine(cfg)
566
+ is_local = _resolved_local is not None and _resolved_local.name == machine.name
569
567
  if is_local:
570
568
  src_dir = Path.home() / ".coord" / "artifacts" / repo_name / sanitized
571
569
  # Nothing to copy when the destination IS the stash directory
@@ -678,8 +676,8 @@ def _prune_dead_sessions(enriched: "list[dict]", config_path: "Path") -> None:
678
676
  from coord.state import COORD_DIR, get_connection # noqa: PLC0415
679
677
  from coord.agent import _commits_ahead # noqa: PLC0415
680
678
  from coord.interactive import tmux_session_name # noqa: PLC0415
679
+ from coord.config import resolve_local_machine # noqa: PLC0415
681
680
 
682
- _local_hn = socket.gethostname().split(".")[0].lower()
683
681
  worktrees_dir = COORD_DIR / "worktrees"
684
682
  now = time.time()
685
683
 
@@ -688,9 +686,11 @@ def _prune_dead_sessions(enriched: "list[dict]", config_path: "Path") -> None:
688
686
  cfg = _load_config(config_path)
689
687
  machines_by_name = {m.name: m for m in cfg.machines}
690
688
  repos_by_name = {r.name: r for r in cfg.repos}
689
+ _resolved_local = resolve_local_machine(cfg)
691
690
  except Exception: # noqa: BLE001
692
691
  machines_by_name = {}
693
692
  repos_by_name = {}
693
+ _resolved_local = None
694
694
 
695
695
  pruned = 0
696
696
  for s in enriched:
@@ -703,8 +703,7 @@ def _prune_dead_sessions(enriched: "list[dict]", config_path: "Path") -> None:
703
703
  mobj = machines_by_name.get(raw_machine)
704
704
  if mobj is not None:
705
705
  _is_local = (
706
- mobj.name.lower() == _local_hn
707
- or mobj.host.split(".")[0].lower() == _local_hn
706
+ _resolved_local is not None and _resolved_local.name == mobj.name
708
707
  )
709
708
  else:
710
709
  # Machine name set but not in config — treat as remote to be safe.
@@ -887,14 +886,13 @@ def sessions_cmd(
887
886
  import concurrent.futures as _cf # noqa: PLC0415
888
887
 
889
888
  try:
889
+ from coord.config import resolve_local_machine # noqa: PLC0415
890
+
890
891
  _cfg = _load_config(config_path)
891
- _local_hn = socket.gethostname().split(".")[0].lower()
892
+ _resolved_local = resolve_local_machine(_cfg)
892
893
  _remotes = [
893
894
  m for m in _cfg.machines
894
- if not (
895
- m.name.lower() == _local_hn
896
- or m.host.split(".")[0].lower() == _local_hn
897
- )
895
+ if _resolved_local is None or m.name != _resolved_local.name
898
896
  ]
899
897
  except Exception: # noqa: BLE001
900
898
  _remotes = []
@@ -1275,10 +1273,12 @@ def reattach(assignment_id: str, config_path: Path) -> None:
1275
1273
  else ("$HOME" if rp == "~" else rp)
1276
1274
  )
1277
1275
  ssh_target_val = machine_obj.host
1278
- _local_hn = socket.gethostname().split(".")[0].lower()
1276
+ from coord.config import resolve_local_machine # noqa: PLC0415
1277
+
1278
+ _resolved_local = resolve_local_machine(cfg)
1279
1279
  is_local_session = (
1280
- machine_obj.name.lower() == _local_hn
1281
- or machine_obj.host.split(".")[0].lower() == _local_hn
1280
+ _resolved_local is not None
1281
+ and _resolved_local.name == machine_obj.name
1282
1282
  )
1283
1283
  except Exception: # noqa: BLE001
1284
1284
  pass
@@ -1904,12 +1904,13 @@ def watch(
1904
1904
  sys.exit(2)
1905
1905
 
1906
1906
  # ── Detect whether the assignment lives on a remote agent ────────────
1907
+ from coord.config import resolve_local_machine # noqa: PLC0415
1908
+
1907
1909
  machine_name = record.get("machine_name", "")
1908
1910
  machine = next((m for m in cfg.machines if m.name == machine_name), None)
1909
- hostname = socket.gethostname().split(".")[0]
1911
+ _resolved_local = resolve_local_machine(cfg)
1910
1912
  is_remote = machine is not None and (
1911
- machine.name != hostname
1912
- and machine.host.split(".")[0] != hostname
1913
+ _resolved_local is None or _resolved_local.name != machine.name
1913
1914
  )
1914
1915
 
1915
1916
  if is_remote:
@@ -29,12 +29,17 @@ import subprocess
29
29
  import sys
30
30
  from datetime import datetime, timezone
31
31
  from pathlib import Path
32
+ from typing import TYPE_CHECKING
32
33
 
33
34
  import click
34
35
 
35
36
  from coord.commands._common import _CONFIG_OPTION, _load_config
36
37
  from coord.interactive import TERM_SESSION_PREFIX, TmuxHost, tmux_available, tmux_session_alive
37
38
 
39
+ if TYPE_CHECKING:
40
+ from coord.config import Config
41
+ from coord.models import Machine
42
+
38
43
  __all__ = [
39
44
  "terminal_group",
40
45
  "terminal_session_name",
@@ -129,9 +134,17 @@ def _local_short_hostname() -> str:
129
134
  return socket.gethostname().split(".")[0].lower()
130
135
 
131
136
 
132
- def _is_local_machine(name: str, host: str) -> bool:
133
- local_hn = _local_short_hostname()
134
- return name.lower() == local_hn or host.split(".")[0].lower() == local_hn
137
+ def _is_local_machine(cfg: "Config", machine: "Machine") -> bool:
138
+ """Is *machine* the host this process is running on?
139
+
140
+ Routes through :func:`coord.config.resolve_local_machine` (#3440) — the
141
+ shared "is this the local machine or must I SSH?" answer — rather than a
142
+ private hostname comparison.
143
+ """
144
+ from coord.config import resolve_local_machine # noqa: PLC0415
145
+
146
+ resolved = resolve_local_machine(cfg)
147
+ return resolved is not None and resolved.name == machine.name
135
148
 
136
149
 
137
150
  def _resolve_machine_host(
@@ -153,7 +166,7 @@ def _resolve_machine_host(
153
166
  click.echo(f"error: machine {machine_name!r} not in config", err=True)
154
167
  sys.exit(1)
155
168
 
156
- if _is_local_machine(machine.name, machine.host):
169
+ if _is_local_machine(cfg, machine):
157
170
  return TmuxHost(ssh_target=None), machine.name
158
171
  return TmuxHost(ssh_target=machine.host), machine.name
159
172
 
@@ -261,7 +274,7 @@ def terminal_list(output_json: bool, remote: bool, config_path: Path) -> None:
261
274
  local_host_str = local_hn
262
275
  if cfg is not None:
263
276
  m = next(
264
- (mm for mm in cfg.machines if _is_local_machine(mm.name, mm.host)), None
277
+ (mm for mm in cfg.machines if _is_local_machine(cfg, mm)), None
265
278
  )
266
279
  if m is not None:
267
280
  local_machine_name = m.name
@@ -274,7 +287,7 @@ def terminal_list(output_json: bool, remote: bool, config_path: Path) -> None:
274
287
 
275
288
  if remote and cfg is not None:
276
289
  remotes = [
277
- m for m in cfg.machines if not _is_local_machine(m.name, m.host)
290
+ m for m in cfg.machines if not _is_local_machine(cfg, m)
278
291
  ]
279
292
  if remotes:
280
293
  import concurrent.futures as _cf # noqa: PLC0415
@@ -3,9 +3,15 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import fnmatch
6
+ import json
6
7
  import os
7
8
  import re
9
+ import socket
10
+ import subprocess
8
11
  import sys
12
+ # `from datetime import time` below shadows the stdlib `time` module in this
13
+ # namespace, so the monotonic clock is imported under an explicit alias.
14
+ import time as time_module
9
15
  from dataclasses import dataclass, field, fields
10
16
  from datetime import time
11
17
  from pathlib import Path
@@ -2408,6 +2414,192 @@ class Config:
2408
2414
  return next((r for r in self.repos if r.name == name), None)
2409
2415
 
2410
2416
 
2417
+ def _local_short_hostname() -> str:
2418
+ """The OS short hostname (split on '.', lowercased).
2419
+
2420
+ Isolated so tests can patch ``coord.config._local_short_hostname``
2421
+ without monkey-patching the global ``socket`` module. This is the
2422
+ lowest-priority signal :func:`resolve_local_machine` consults — see
2423
+ its docstring.
2424
+ """
2425
+ return socket.gethostname().split(".")[0].lower()
2426
+
2427
+
2428
+ def _tailscale_self_dns_name(*, timeout: float = 3.0) -> str | None:
2429
+ """This host's Tailscale DNS name via ``tailscale status --self --json``,
2430
+ or ``None`` when it can't be determined.
2431
+
2432
+ ``Self.DNSName`` (falling back to ``Self.HostName``) is exactly what a
2433
+ machine's ``host:`` is set FROM in a Tailscale fleet (#3440) — e.g.
2434
+ ``macmini.tailf46ef8.ts.net``. Degrades quietly (never raises) when the
2435
+ ``tailscale`` binary is absent, the call times out, or the output isn't
2436
+ the JSON shape expected: this is an optional identity signal, one of
2437
+ several :func:`resolve_local_machine` tries, not a hard dependency.
2438
+ """
2439
+ try:
2440
+ result = subprocess.run(
2441
+ ["tailscale", "status", "--self", "--json"],
2442
+ capture_output=True,
2443
+ text=True,
2444
+ timeout=timeout,
2445
+ check=False,
2446
+ )
2447
+ except (OSError, subprocess.TimeoutExpired):
2448
+ return None
2449
+ if result.returncode != 0 or not result.stdout:
2450
+ return None
2451
+ try:
2452
+ data = json.loads(result.stdout)
2453
+ except json.JSONDecodeError:
2454
+ return None
2455
+ self_info = data.get("Self") if isinstance(data, dict) else None
2456
+ if not isinstance(self_info, dict):
2457
+ return None
2458
+ dns_name = self_info.get("DNSName") or self_info.get("HostName")
2459
+ if not isinstance(dns_name, str) or not dns_name:
2460
+ return None
2461
+ return dns_name.rstrip(".").lower()
2462
+
2463
+
2464
+ # #3440: memo for :func:`_cached_tailscale_self_dns_name` — ``(monotonic
2465
+ # deadline | None, answer)``. A ``None`` deadline means "never expires".
2466
+ _TS_SELF_DNS_MEMO: tuple[float | None, str | None] | None = None
2467
+
2468
+ # How long a FAILED probe is remembered. Deliberately short and finite: see
2469
+ # :func:`_cached_tailscale_self_dns_name`.
2470
+ TS_SELF_DNS_NEGATIVE_TTL = 60.0
2471
+
2472
+
2473
+ def reset_tailscale_self_dns_cache() -> None:
2474
+ """Forget the memoized Tailscale self-identity.
2475
+
2476
+ Exported for tests (``tests/conftest.py`` resets it between tests, the
2477
+ same shape as ``reset_resource_route_support``): a module-level memo
2478
+ would otherwise leak one test's stubbed identity into the next.
2479
+ """
2480
+ global _TS_SELF_DNS_MEMO
2481
+ _TS_SELF_DNS_MEMO = None
2482
+
2483
+
2484
+ def _cached_tailscale_self_dns_name(
2485
+ *, now: float | None = None,
2486
+ ) -> str | None:
2487
+ """:func:`_tailscale_self_dns_name`, memoized — the accessor
2488
+ :func:`resolve_local_machine` actually calls.
2489
+
2490
+ Why memoize at all: ``resolve_local_machine`` is called on a timer by
2491
+ long-lived processes (``coord serve``'s reap ticks, every few seconds).
2492
+ On a host that matches no machine by hostname — precisely the #3440 host,
2493
+ and every thin client — the Tailscale tier is reached on EVERY call, so
2494
+ an unmemoized probe is a ``tailscale`` subprocess (up to a 3s timeout)
2495
+ every few seconds, forever.
2496
+
2497
+ Why a SUCCESS is cached forever but a FAILURE is not (#2096): a host's
2498
+ Tailscale DNS name is a stable fact for the lifetime of a process, so
2499
+ re-probing after a successful answer buys nothing. A failed probe is
2500
+ *not* a fact about the host — it is a fact about the last 3 seconds
2501
+ (``tailscaled`` not up yet, the daemon started at boot before the network
2502
+ did). Caching that forever would turn a transient miss into a permanent,
2503
+ uncontradictable "this host is not in the fleet" verdict for a daemon
2504
+ that runs for days, which is the same class of bug as the one #3440 is
2505
+ fixing. So a negative answer is retried after
2506
+ ``TS_SELF_DNS_NEGATIVE_TTL`` seconds — bounded cost, self-healing.
2507
+ """
2508
+ global _TS_SELF_DNS_MEMO
2509
+
2510
+ now = time_module.monotonic() if now is None else now
2511
+ memo = _TS_SELF_DNS_MEMO
2512
+ if memo is not None:
2513
+ expires_at, answer = memo
2514
+ if expires_at is None or now < expires_at:
2515
+ return answer
2516
+
2517
+ answer = _tailscale_self_dns_name()
2518
+ _TS_SELF_DNS_MEMO = (
2519
+ None if answer else now + TS_SELF_DNS_NEGATIVE_TTL,
2520
+ answer,
2521
+ )
2522
+ return answer
2523
+
2524
+
2525
+ def resolve_local_machine(
2526
+ config: "Config", *, env: "dict[str, str] | None" = None,
2527
+ ) -> "Machine | None":
2528
+ """The single answer to "which configured machine, if any, IS the host
2529
+ this process is running on?" (#3440).
2530
+
2531
+ Every "is this local or remote" call site in the codebase must call
2532
+ this instead of keeping a private ``socket.gethostname()`` comparison —
2533
+ two independent implementations of the same question are a split-brain
2534
+ waiting to happen (see #2085). Tried in order, first match wins:
2535
+
2536
+ 1. Each machine's own ``local_hostnames:`` alias list (the operator's
2537
+ escape hatch) against the OS short hostname — for hosts whose OS
2538
+ hostname matches neither ``name`` nor ``host`` (macOS's default
2539
+ ``Johns-Mac-mini``, observed on macmini).
2540
+ 2. The historical fallback: OS short hostname vs ``machine.name`` or
2541
+ the first label of ``machine.host``. Tried BEFORE the Tailscale
2542
+ probe below — deliberately: this comparison is pure and free, it
2543
+ resolves the overwhelming majority of fleet machines (whose OS
2544
+ hostname already agrees with `coordinator.yml`), and periodic
2545
+ callers (`coord serve`'s reap ticks) run it every few seconds —
2546
+ shelling out to `tailscale` that often, when a free comparison
2547
+ already answers the question, is both wasteful and, in one
2548
+ audited path, breaks a ToS no-unexpected-subprocess guardrail
2549
+ (`tests/test_reap_merged_sessions.py`).
2550
+ 3. This host's Tailscale identity
2551
+ (:func:`_cached_tailscale_self_dns_name`) against ``machine.host``'s
2552
+ full DNS name, not just its first label — ``host:`` is set FROM the
2553
+ Tailscale DNS name in this fleet, so this is the tier that actually
2554
+ fixes #3440: it catches exactly the hosts step 2 cannot (an OS
2555
+ hostname with nothing to do with the fleet name). Only reached when
2556
+ steps 1–2 found nothing, AND memoized per process, so the subprocess
2557
+ cost is paid once by the hosts that actually need it rather than on
2558
+ every reap tick.
2559
+ 4. ``$COORD_LOCAL_MACHINE`` (or *env*'s override) naming a machine by
2560
+ ``name`` exactly — the last-resort override for when none of the
2561
+ above can match at all.
2562
+
2563
+ Returns ``None`` when nothing matches — callers must treat that as
2564
+ "this host isn't a recognized machine in coordinator.yml", never
2565
+ silently assume remote OR local.
2566
+ """
2567
+ local_hostname = _local_short_hostname()
2568
+
2569
+ for machine in config.machines:
2570
+ # getattr, not a bare attribute read: some call sites pass
2571
+ # duck-typed test fixtures predating this field rather than a real
2572
+ # `coord.models.Machine` — treat "no attribute" the same as "empty
2573
+ # list" (this field's own documented default) rather than raising.
2574
+ aliases = {a.lower() for a in getattr(machine, "local_hostnames", None) or []}
2575
+ if local_hostname in aliases:
2576
+ return machine
2577
+
2578
+ for machine in config.machines:
2579
+ if (
2580
+ machine.name.lower() == local_hostname
2581
+ or machine.host.split(".")[0].lower() == local_hostname
2582
+ ):
2583
+ return machine
2584
+
2585
+ ts_dns = _cached_tailscale_self_dns_name()
2586
+ if ts_dns:
2587
+ for machine in config.machines:
2588
+ host = (machine.host or "").rstrip(".").lower()
2589
+ if host and host == ts_dns:
2590
+ return machine
2591
+
2592
+ if env is None:
2593
+ env = os.environ
2594
+ override = env.get("COORD_LOCAL_MACHINE")
2595
+ if override:
2596
+ for machine in config.machines:
2597
+ if machine.name.lower() == override.lower():
2598
+ return machine
2599
+
2600
+ return None
2601
+
2602
+
2411
2603
  def load(path: str | Path | None = None) -> Config:
2412
2604
  """Load and validate a coordinator.yml file.
2413
2605
 
@@ -3095,6 +3287,16 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
3095
3287
  entry.get("quiet_hours"), machine_index=i, machine_name=name,
3096
3288
  )
3097
3289
 
3290
+ # #3440: optional alias list of OS short hostnames that should be
3291
+ # treated as "this machine" by `resolve_local_machine` — the
3292
+ # operator's escape hatch for hosts whose OS hostname (e.g. macOS's
3293
+ # `Johns-Mac-mini` default) matches neither `name` nor `host`.
3294
+ local_hostnames = entry.get("local_hostnames", []) or []
3295
+ if not isinstance(local_hostnames, list) or not all(
3296
+ isinstance(h, str) for h in local_hostnames
3297
+ ):
3298
+ raise ConfigError(f"machines[{i}].local_hostnames must be a list of strings")
3299
+
3098
3300
  # #3366: optional fact about which init system supervises this
3099
3301
  # host's `coord agent` — see `Machine.supervisor`'s docstring for
3100
3302
  # why it isn't inferred. Validated against the two names
@@ -3136,6 +3338,7 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
3136
3338
  quiet_hours=quiet_hours,
3137
3339
  health_timeout=machine_health_timeout,
3138
3340
  supervisor=machine_supervisor,
3341
+ local_hostnames=local_hostnames,
3139
3342
  )
3140
3343
  )
3141
3344
  return machines
@@ -3234,21 +3234,18 @@ def build_app(
3234
3234
  # Seeded roster — no tmux, no ssh fan-out in fixture mode.
3235
3235
  return JSONResponse(_fixture.sessions())
3236
3236
 
3237
+ from coord.config import resolve_local_machine
3237
3238
  from coord.interactive import (
3238
3239
  TMUX_SESSION_PREFIX,
3239
3240
  TmuxHost,
3240
- _get_local_short_hostname,
3241
3241
  list_coord_tmux_sessions,
3242
3242
  )
3243
3243
 
3244
3244
  loop = asyncio.get_running_loop()
3245
- local_hn = _get_local_short_hostname()
3245
+ _resolved_local = resolve_local_machine(config)
3246
3246
 
3247
3247
  def _is_local_machine(machine) -> bool:
3248
- return (
3249
- machine.name.lower() == local_hn
3250
- or machine.host.split(".")[0].lower() == local_hn
3251
- )
3248
+ return _resolved_local is not None and _resolved_local.name == machine.name
3252
3249
 
3253
3250
  def _sweep_one(machine):
3254
3251
  is_local = _is_local_machine(machine)
@@ -15,7 +15,6 @@ from __future__ import annotations
15
15
 
16
16
  import asyncio
17
17
  import os
18
- import socket
19
18
  import struct
20
19
  import subprocess
21
20
  from pathlib import Path
@@ -55,12 +54,6 @@ def resolve_web_token(flag_token: str | None = None) -> str | None:
55
54
  return None
56
55
 
57
56
 
58
- def _local_short_hostname() -> str:
59
- """Same two-line idiom used inline in coord/interactive.py and
60
- coord/commands/sessions.py -- there is no shared public helper for it."""
61
- return socket.gethostname().split(".")[0].lower()
62
-
63
-
64
57
  def resolve_session_target(
65
58
  session_id: str, board: Board, config: Config
66
59
  ) -> tuple[str | None, str] | None:
@@ -93,11 +86,10 @@ def resolve_session_target(
93
86
  if machine is None:
94
87
  return None, session_name
95
88
 
96
- local_hn = _local_short_hostname()
97
- is_local = (
98
- machine.name.lower() == local_hn
99
- or machine.host.split(".")[0].lower() == local_hn
100
- )
89
+ from coord.config import resolve_local_machine # noqa: PLC0415
90
+
91
+ resolved_local = resolve_local_machine(config)
92
+ is_local = resolved_local is not None and resolved_local.name == machine.name
101
93
  return (None if is_local else machine.host), session_name
102
94
 
103
95