code-coordinator 0.5.498__tar.gz → 0.5.500__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 (901) hide show
  1. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.github/workflows/test.yml +28 -6
  2. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/PKG-INFO +1 -1
  3. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/PKG-INFO +1 -1
  4. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/SOURCES.txt +3 -0
  5. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/scm_file_list.json +3 -0
  6. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/scm_version.json +2 -2
  7. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/agent_app.py +51 -4
  8. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/agent_update.py +3 -2
  9. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/agent_ops.py +49 -10
  10. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/release.py +106 -14
  11. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/status.py +12 -2
  12. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/config.py +18 -0
  13. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/machine_onboard.py +52 -3
  14. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/models.py +13 -0
  15. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/release_verify.py +4 -2
  16. code_coordinator-0.5.500/coord/restart_cmd.py +120 -0
  17. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/MAC_MINI.md +10 -0
  18. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_app.py +17 -0
  19. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_deploy_units_endpoint.py +34 -0
  20. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_update.py +33 -0
  21. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_release_propagate.py +161 -3
  22. code_coordinator-0.5.500/tests/test_cli_status_supervisor_3366.py +91 -0
  23. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config.py +36 -0
  24. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_machine_onboard.py +26 -0
  25. code_coordinator-0.5.500/tests/test_restart_cmd.py +88 -0
  26. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_windows_job_is_a_real_gate_2000.py +46 -11
  27. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.claude/commands/board.md +0 -0
  28. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.claude/commands/complete-session.md +0 -0
  29. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.claude/commands/coordinator.md +0 -0
  30. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.githooks/_lib.sh +0 -0
  31. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.githooks/post-checkout +0 -0
  32. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.githooks/post-commit +0 -0
  33. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.githooks/post-merge +0 -0
  34. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  35. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.github/coord-ci-acceptance.yml +0 -0
  36. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.github/workflows/auto-release.yml +0 -0
  37. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.github/workflows/publish.yml +0 -0
  38. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/.gitignore +0 -0
  39. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/CLAUDE.md +0 -0
  40. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/GOAL.md +0 -0
  41. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/LICENSE +0 -0
  42. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/MANIFEST.in +0 -0
  43. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/README.md +0 -0
  44. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/dependency_links.txt +0 -0
  45. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/entry_points.txt +0 -0
  46. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/requires.txt +0 -0
  47. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/code_coordinator.egg-info/top_level.txt +0 -0
  48. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/__init__.py +0 -0
  49. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/_board_mapping.py +0 -0
  50. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/acceptance.py +0 -0
  51. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/acceptance_drivers.py +0 -0
  52. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/agent.py +0 -0
  53. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/agents/opencode/.gitignore +0 -0
  54. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/agents/opencode/agents/work.md +0 -0
  55. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/agents/opencode/routing.jsonc +0 -0
  56. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/approved_work.py +0 -0
  57. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/audit.py +0 -0
  58. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/auto_loop.py +0 -0
  59. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/backup.py +0 -0
  60. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/block_log.py +0 -0
  61. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/board_schema.py +0 -0
  62. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/board_service.py +0 -0
  63. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/board_wire.py +0 -0
  64. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/brain.py +0 -0
  65. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/branch_model.py +0 -0
  66. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/bug_intake.py +0 -0
  67. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/cargo_cache.py +0 -0
  68. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/ci_fix.py +0 -0
  69. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/ci_github.py +0 -0
  70. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/ci_gitlab.py +0 -0
  71. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/ci_store.py +0 -0
  72. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/claim.py +0 -0
  73. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/claude_setup_token.py +0 -0
  74. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/cli.py +0 -0
  75. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/client.py +0 -0
  76. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/codegen.py +0 -0
  77. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/__init__.py +0 -0
  78. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/_common.py +0 -0
  79. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/acceptance.py +0 -0
  80. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/audit.py +0 -0
  81. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/backup.py +0 -0
  82. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/chat.py +0 -0
  83. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/codegen.py +0 -0
  84. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/dispatch.py +0 -0
  85. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/dispatch_workers.py +0 -0
  86. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/dr.py +0 -0
  87. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/drive.py +0 -0
  88. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/drive_queue.py +0 -0
  89. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/gate_a.py +0 -0
  90. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/gates.py +0 -0
  91. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/issues.py +0 -0
  92. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/lifecycle.py +0 -0
  93. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/machine.py +0 -0
  94. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/merge.py +0 -0
  95. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/milestone.py +0 -0
  96. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/plan_followup.py +0 -0
  97. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/plans.py +0 -0
  98. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/portal.py +0 -0
  99. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/pr.py +0 -0
  100. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/repo.py +0 -0
  101. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/report.py +0 -0
  102. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/review.py +0 -0
  103. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/scorecard.py +0 -0
  104. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/sessions.py +0 -0
  105. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/setup.py +0 -0
  106. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/store_migrate.py +0 -0
  107. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/terminal.py +0 -0
  108. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/test_gate.py +0 -0
  109. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/commands/tui.py +0 -0
  110. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/comments.py +0 -0
  111. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/config_reload.py +0 -0
  112. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/confirm_test.py +0 -0
  113. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/conflict_fix.py +0 -0
  114. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dao.py +0 -0
  115. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dashboard/__init__.py +0 -0
  116. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dashboard/fixture.py +0 -0
  117. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dashboard/index.html +0 -0
  118. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dashboard/server.py +0 -0
  119. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dashboard/terminal.py +0 -0
  120. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/db.py +0 -0
  121. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dead_end.py +0 -0
  122. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/decomposition_chat.py +0 -0
  123. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/README.md +0 -0
  124. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-agent.service +0 -0
  125. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-backup.service +0 -0
  126. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-backup.timer +0 -0
  127. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-db-backup.service +0 -0
  128. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-db-backup.sh +0 -0
  129. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-db-backup.timer +0 -0
  130. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-dr-verify.service +0 -0
  131. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-dr-verify.timer +0 -0
  132. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-drive-queue.service +0 -0
  133. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-drive-queue.timer +0 -0
  134. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-failure-notify.service +0 -0
  135. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-fleet-watchdog.service +0 -0
  136. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  137. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-notify.service +0 -0
  138. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-notify.timer +0 -0
  139. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-release-propagate.service +0 -0
  140. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-release-propagate.timer +0 -0
  141. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-release-window.service +0 -0
  142. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-release-window.timer +0 -0
  143. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-serve.service +0 -0
  144. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-web-dist-build.service +0 -0
  145. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-web-dist-build.timer +0 -0
  146. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy/coord-web.service +0 -0
  147. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy_manifest.py +0 -0
  148. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deploy_units.py +0 -0
  149. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deprecation_telemetry.py +0 -0
  150. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/deps.py +0 -0
  151. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/diagnose.py +0 -0
  152. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dispatch.py +0 -0
  153. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dispatch_liveness.py +0 -0
  154. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dist_name.py +0 -0
  155. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dr_promote.py +0 -0
  156. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/dr_verify.py +0 -0
  157. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/drive.py +0 -0
  158. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/drive_queue.py +0 -0
  159. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/drive_state.py +0 -0
  160. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/events.py +0 -0
  161. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/failure_class.py +0 -0
  162. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/failure_classifier.py +0 -0
  163. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/filelock.py +0 -0
  164. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/fleet_config_health.py +0 -0
  165. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/forge_availability.py +0 -0
  166. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/freshness.py +0 -0
  167. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/gate_a.py +0 -0
  168. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/gate_b.py +0 -0
  169. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/gate_snapshot.py +0 -0
  170. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/gates.py +0 -0
  171. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/gen_board_fixture.py +0 -0
  172. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/github_ops.py +0 -0
  173. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/github_throttle.py +0 -0
  174. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/goal.py +0 -0
  175. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/graph_health.py +0 -0
  176. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/__init__.py +0 -0
  177. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/aggregate.py +0 -0
  178. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/__init__.py +0 -0
  179. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/_ci_pin.py +0 -0
  180. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/agent_install.py +0 -0
  181. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/cargo_targets.py +0 -0
  182. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/claude_binary.py +0 -0
  183. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/config_drift.py +0 -0
  184. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  185. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/coord_web_ci_pin.py +0 -0
  186. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/deploy_lane_facts.py +0 -0
  187. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/disk.py +0 -0
  188. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/fleet_board.py +0 -0
  189. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  190. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/fleet_phantom.py +0 -0
  191. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/fleet_unit_drift.py +0 -0
  192. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/graph.py +0 -0
  193. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/graphify_cli.py +0 -0
  194. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/index_lock.py +0 -0
  195. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/issues_sync_staleness.py +0 -0
  196. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/plan_usage.py +0 -0
  197. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/pr_churn.py +0 -0
  198. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/release_cordon.py +0 -0
  199. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/repo_state.py +0 -0
  200. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/spawned_coord.py +0 -0
  201. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/stalled_pipeline.py +0 -0
  202. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/timer_active.py +0 -0
  203. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/toolchain.py +0 -0
  204. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/unit_drift.py +0 -0
  205. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/unit_enablement.py +0 -0
  206. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/wedged_drive_queue.py +0 -0
  207. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/checks/worktrees.py +0 -0
  208. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/cli.py +0 -0
  209. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/context.py +0 -0
  210. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/fleet_snapshot.py +0 -0
  211. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/models.py +0 -0
  212. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/pypi.py +0 -0
  213. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/registry.py +0 -0
  214. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/render.py +0 -0
  215. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/health/units.py +0 -0
  216. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/hooks.py +0 -0
  217. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/housekeeping.py +0 -0
  218. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/interactive.py +0 -0
  219. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/invariant_alarms.py +0 -0
  220. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/issue_store.py +0 -0
  221. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/issues_sync_status.py +0 -0
  222. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/liveness_auditor.py +0 -0
  223. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/machine_fault.py +0 -0
  224. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/machine_metrics.py +0 -0
  225. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/machine_pause.py +0 -0
  226. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/machine_stats.py +0 -0
  227. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/merge_queue.py +0 -0
  228. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/milestone_chat.py +0 -0
  229. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/milestone_dispatch.py +0 -0
  230. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/milestone_gate.py +0 -0
  231. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/milestone_order.py +0 -0
  232. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/mock_author.py +0 -0
  233. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/network.py +0 -0
  234. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/new_issue_chat.py +0 -0
  235. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/__init__.py +0 -0
  236. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/baseline.py +0 -0
  237. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/cli.py +0 -0
  238. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/collect.py +0 -0
  239. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/digest.py +0 -0
  240. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/models.py +0 -0
  241. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/predicate.py +0 -0
  242. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/service.py +0 -0
  243. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/store.py +0 -0
  244. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notifier/transport.py +0 -0
  245. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/notify.py +0 -0
  246. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/openapi.py +0 -0
  247. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/overlap_fence.py +0 -0
  248. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/overlap_predict.py +0 -0
  249. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/parentage.py +0 -0
  250. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/parentage_github.py +0 -0
  251. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/pipeline.py +0 -0
  252. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/plan_parser.py +0 -0
  253. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/plans.py +0 -0
  254. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/platform_paths.py +0 -0
  255. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/portal_bridge.py +0 -0
  256. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/portal_store.py +0 -0
  257. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/portal_sync.py +0 -0
  258. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/pr_body_lint.py +0 -0
  259. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/prereqs.py +0 -0
  260. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/progress.py +0 -0
  261. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/providers/__init__.py +0 -0
  262. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/providers/base.py +0 -0
  263. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/providers/claude.py +0 -0
  264. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/providers/claude_pty.py +0 -0
  265. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/providers/opencode.py +0 -0
  266. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/queue_diagnose.py +0 -0
  267. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/reconcile.py +0 -0
  268. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/reconcile_tick.py +0 -0
  269. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/refine_chat.py +0 -0
  270. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/release_cordon.py +0 -0
  271. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/release_propagate.py +0 -0
  272. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/release_window.py +0 -0
  273. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/repo_dormancy.py +0 -0
  274. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/repo_edit.py +0 -0
  275. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/repo_onboard.py +0 -0
  276. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/reports.py +0 -0
  277. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/rest_schema.py +0 -0
  278. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/revalidate.py +0 -0
  279. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/review.py +0 -0
  280. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/scorecard.py +0 -0
  281. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/self_health.py +0 -0
  282. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/serve_app.py +0 -0
  283. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  284. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  285. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  286. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  287. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  288. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/portal-followup/SKILL.md +0 -0
  289. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/release-now/SKILL.md +0 -0
  290. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  291. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  292. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/skills/update-issue/SKILL.md +0 -0
  293. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/smoke.py +0 -0
  294. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/spend_ceiling.py +0 -0
  295. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/split_work.py +0 -0
  296. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/sql.py +0 -0
  297. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/stage_projection.py +0 -0
  298. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/state.py +0 -0
  299. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/store_migrate.py +0 -0
  300. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/store_parity.py +0 -0
  301. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/templates/deploy-cloudflare.node.yml +0 -0
  302. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/test_author.py +0 -0
  303. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/test_chat.py +0 -0
  304. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/test_orchestrator.py +0 -0
  305. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/test_report.py +0 -0
  306. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/tui_release.py +0 -0
  307. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/uat_checks.py +0 -0
  308. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/usage.py +0 -0
  309. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/usage_limits.py +0 -0
  310. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/usage_rollup.py +0 -0
  311. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coord/worker_events.py +0 -0
  312. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/coordinator.example.yml +0 -0
  313. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-agent.service +0 -0
  314. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-backup.service +0 -0
  315. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-backup.timer +0 -0
  316. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-db-backup.service +0 -0
  317. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-db-backup.sh +0 -0
  318. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-db-backup.timer +0 -0
  319. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-dr-verify.service +0 -0
  320. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-dr-verify.timer +0 -0
  321. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-drive-queue.service +0 -0
  322. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-drive-queue.timer +0 -0
  323. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-failure-notify.service +0 -0
  324. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-failure-notify.sh +0 -0
  325. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-fleet-watchdog.service +0 -0
  326. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-fleet-watchdog.timer +0 -0
  327. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-notify.service +0 -0
  328. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-notify.timer +0 -0
  329. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-release-propagate.service +0 -0
  330. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-release-propagate.timer +0 -0
  331. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-release-window.service +0 -0
  332. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-release-window.timer +0 -0
  333. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-serve.service +0 -0
  334. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-web-dist-build.service +0 -0
  335. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-web-dist-build.sh +0 -0
  336. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-web-dist-build.timer +0 -0
  337. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-web-rollback.sh +0 -0
  338. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/coord-web.service +0 -0
  339. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/deploy/node-shim.sh +0 -0
  340. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ADR_COORD_TUI_CI.md +0 -0
  341. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  342. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ADR_COORD_WEB_CI.md +0 -0
  343. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ADR_COORD_WEB_DIST.md +0 -0
  344. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  345. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/AGENT_OPERATIONS.md +0 -0
  346. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ARCHITECTURE.md +0 -0
  347. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ARCH_SECURITY_GATES.md +0 -0
  348. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/COCKPIT.md +0 -0
  349. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/CONTROL_CENTER.md +0 -0
  350. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/COST_DISCIPLINE.md +0 -0
  351. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/CROSS_PLATFORM.md +0 -0
  352. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/CUSTOMER_FACING_APPS.md +0 -0
  353. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/CUSTOMER_PORTAL.md +0 -0
  354. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/DATA_STORE_SELECTION.md +0 -0
  355. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/DISASTER_RECOVERY.md +0 -0
  356. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/DRIVE_QUEUE.md +0 -0
  357. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/EPHEMERAL_WORKERS.md +0 -0
  358. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/FORGE_MIGRATION.md +0 -0
  359. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/GRAPHIFY_SETUP.md +0 -0
  360. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ISSUE_GUIDANCE.md +0 -0
  361. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  362. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/NOTIFIER.md +0 -0
  363. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/OPENCODE_VERIFICATION.md +0 -0
  364. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/OPERATING_GOTCHAS.md +0 -0
  365. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/OPERATOR_GUIDES.md +0 -0
  366. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/ORACLE_LOOP.md +0 -0
  367. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/PHONE_WEBAPP.md +0 -0
  368. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/PIPELINE_V2.md +0 -0
  369. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/PLATFORM_EVOLUTION.md +0 -0
  370. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/SECOND_BACKEND.md +0 -0
  371. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/STORE_SERVICE.md +0 -0
  372. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  373. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/WEB_CONTROL_CENTER.md +0 -0
  374. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/WSL_WINDOWS_WORKER.md +0 -0
  375. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/mocks/web/README.md +0 -0
  376. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/mocks/web/_tokens.css +0 -0
  377. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/mocks/web/issue-detail.html +0 -0
  378. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/mocks/web/pipeline-narrow.html +0 -0
  379. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/docs/mocks/web/pipeline-wide.html +0 -0
  380. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/graphify-out/.gitignore +0 -0
  381. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/install-agent.sh +0 -0
  382. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/pyproject.toml +0 -0
  383. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/audit_review_verdict_overrides.py +0 -0
  384. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  385. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/build-worker-image.sh +0 -0
  386. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/coordinator-machine.py +0 -0
  387. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/dr-down.sh +0 -0
  388. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/dr-up.sh +0 -0
  389. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/epic-down.sh +0 -0
  390. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/epic-up.sh +0 -0
  391. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/preflight.sh +0 -0
  392. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/provision-server.sh +0 -0
  393. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/provision-worker.sh +0 -0
  394. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  395. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  396. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/throwaway-vm.sh +0 -0
  397. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/azure-workers/verify-github-token.sh +0 -0
  398. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/check_gh_argv_containment.py +0 -0
  399. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/codegen.py +0 -0
  400. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/coord-test-runner.sh +0 -0
  401. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  402. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  403. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  404. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  405. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/coord-venv-rollback.sh +0 -0
  406. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/drive-batch.sh +0 -0
  407. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/extract-coord-tui.sh +0 -0
  408. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/fleet_watchdog.py +0 -0
  409. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/gen_board_fixture.py +0 -0
  410. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/gen_mock_index.py +0 -0
  411. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/lib/provision-core.sh +0 -0
  412. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/next_release_tag.py +0 -0
  413. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/provision-machine.sh +0 -0
  414. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/run_tests_in_populated_home.sh +0 -0
  415. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/run_tests_without_gh.sh +0 -0
  416. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/setup-macmini.sh +0 -0
  417. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/smoke_437_interactive.py +0 -0
  418. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/verify-provision-noble.sh +0 -0
  419. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/verify_878_review_capture.py +0 -0
  420. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/verify_release_published.py +0 -0
  421. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/scripts/verify_release_wheel.py +0 -0
  422. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/setup.cfg +0 -0
  423. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/SMOKE_SET.md +0 -0
  424. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/__init__.py +0 -0
  425. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-37/conftest.py +0 -0
  426. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-37/contract.md +0 -0
  427. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-37/manifest.yml +0 -0
  428. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  429. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  430. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-51/contract.md +0 -0
  431. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  432. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  433. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-51/manifest.yml +0 -0
  434. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  435. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-51/tsconfig.json +0 -0
  436. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  437. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/backends.py +0 -0
  438. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/conftest.py +0 -0
  439. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/board-pipeline-basic.json +0 -0
  440. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  441. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  442. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  443. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  444. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/all_pass.json +0 -0
  445. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  446. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/mixed_fail.json +0 -0
  447. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  448. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  449. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/skip.json +0 -0
  450. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/playwright/truncated.json +0 -0
  451. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  452. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  453. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  455. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  456. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  457. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  458. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  459. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_acceptance.py +0 -0
  460. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_acceptance_drivers.py +0 -0
  461. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent.py +0 -0
  462. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_api_error.py +0 -0
  463. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_branch_base.py +0 -0
  464. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_branch_capture.py +0 -0
  465. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_config_free_1712.py +0 -0
  466. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_dirty_worktree.py +0 -0
  467. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  468. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_graph_self_heal.py +0 -0
  469. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_health_h3.py +0 -0
  470. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_idle_restart.py +0 -0
  471. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_push_failure.py +0 -0
  472. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_reap.py +0 -0
  473. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_repos_and_pull.py +0 -0
  474. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_restart_services_endpoint.py +0 -0
  475. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_skills_self_heal.py +0 -0
  476. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_startup_diagnostics.py +0 -0
  477. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_update_bluegreen.py +0 -0
  478. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_usage_limit.py +0 -0
  479. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_agent_zero_commit.py +0 -0
  480. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ambient_home_isolation.py +0 -0
  481. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_approve_capability_reroute_3241.py +0 -0
  482. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_approve_dependency_busy_2804.py +0 -0
  483. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_approve_reject_plan.py +0 -0
  484. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_approve_usage_gate.py +0 -0
  485. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_approved_work_2532.py +0 -0
  486. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_approved_work_2996.py +0 -0
  487. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_assignment_already_recorded_daemon.py +0 -0
  488. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_audit_log.py +0 -0
  489. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_audit_outcome.py +0 -0
  490. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_audit_query.py +0 -0
  491. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_auto_loop.py +0 -0
  492. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_auto_release_publish_2035.py +0 -0
  493. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_backend_selection.py +0 -0
  494. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_backup.py +0 -0
  495. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_base_checkout_restore.py +0 -0
  496. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_block_log.py +0 -0
  497. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_cap_762.py +0 -0
  498. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_fixture.py +0 -0
  499. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_read_path.py +0 -0
  500. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_schema.py +0 -0
  501. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_service.py +0 -0
  502. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_state.py +0 -0
  503. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_board_wire.py +0 -0
  504. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_brain.py +0 -0
  505. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_branch_model.py +0 -0
  506. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_bug_intake.py +0 -0
  507. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_build_worker_image_env_update.py +0 -0
  508. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cargo_cache.py +0 -0
  509. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_check_gh_argv_containment.py +0 -0
  510. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ci_acceptance_gate_1950.py +0 -0
  511. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ci_fix.py +0 -0
  512. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ci_github.py +0 -0
  513. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ci_gitlab.py +0 -0
  514. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ci_parity_2091.py +0 -0
  515. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_ci_store.py +0 -0
  516. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_claim.py +0 -0
  517. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_claude_md_budget.py +0 -0
  518. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_claude_setup_token.py +0 -0
  519. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_acceptance.py +0 -0
  520. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_assign.py +0 -0
  521. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  522. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_assign_interactive_remote.py +0 -0
  523. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_assign_provider.py +0 -0
  524. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  525. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_audit.py +0 -0
  526. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_chat_continue.py +0 -0
  527. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_codegen.py +0 -0
  528. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_decide.py +0 -0
  529. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_diagnose_capability_rules.py +0 -0
  530. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_diagnose_config_provenance.py +0 -0
  531. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_diagnose_forge_availability.py +0 -0
  532. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_diagnose_graph.py +0 -0
  533. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_diagnose_self.py +0 -0
  534. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_diagnose_test_coverage.py +0 -0
  535. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_doctor.py +0 -0
  536. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_doctor_config_free_1801.py +0 -0
  537. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  538. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  539. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_drive.py +0 -0
  540. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_drive_queue.py +0 -0
  541. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_escalate.py +0 -0
  542. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_fix_headless_review.py +0 -0
  543. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_gate_a.py +0 -0
  544. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_install_drift.py +0 -0
  545. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_install_skills.py +0 -0
  546. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_issue_comment.py +0 -0
  547. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_issue_create_label.py +0 -0
  548. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_issue_reopen.py +0 -0
  549. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_issue_view_list.py +0 -0
  550. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_merge.py +0 -0
  551. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_assign.py +0 -0
  552. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_capture.py +0 -0
  553. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_chat_add_child.py +0 -0
  554. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_dispatch.py +0 -0
  555. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_gate_b.py +0 -0
  556. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_gate_c.py +0 -0
  557. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_order.py +0 -0
  558. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  559. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_milestone_ship.py +0 -0
  560. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_network.py +0 -0
  561. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_new_issue_chat.py +0 -0
  562. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_plans.py +0 -0
  563. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_portal.py +0 -0
  564. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_pr.py +0 -0
  565. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_pull_artifact.py +0 -0
  566. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_queue.py +0 -0
  567. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_reattach_sessions.py +0 -0
  568. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_refine_board.py +0 -0
  569. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_release_preflight.py +0 -0
  570. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_release_window.py +0 -0
  571. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_repo_2220.py +0 -0
  572. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  573. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_scorecard.py +0 -0
  574. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_serve_store_backend_3084.py +0 -0
  575. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_set_review_findings.py +0 -0
  576. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_advisory_terminal.py +0 -0
  577. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_contested_tag.py +0 -0
  578. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_invariant_alarms.py +0 -0
  579. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_machine_fault.py +0 -0
  580. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_merge_queue.py +0 -0
  581. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_provider.py +0 -0
  582. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_retried_3340.py +0 -0
  583. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_review_finalizing.py +0 -0
  584. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_test_failed_tag.py +0 -0
  585. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_status_usage_limit.py +0 -0
  586. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_sync_comments_873.py +0 -0
  587. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_test_plan.py +0 -0
  588. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_track.py +0 -0
  589. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_tui_update.py +0 -0
  590. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cli_wait.py +0 -0
  591. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_client.py +0 -0
  592. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_client_base_install.py +0 -0
  593. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_client_config_cache_atomic_3052.py +0 -0
  594. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_client_resource_migration_1946.py +0 -0
  595. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_commands_common.py +0 -0
  596. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_comments.py +0 -0
  597. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_completion_summary.py +0 -0
  598. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config_acceptance.py +0 -0
  599. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config_audit.py +0 -0
  600. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config_drift_check.py +0 -0
  601. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config_pricing.py +0 -0
  602. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  603. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_config_usage_gate.py +0 -0
  604. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_confirm_test.py +0 -0
  605. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_conflict_fix.py +0 -0
  606. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_conflict_fix_semantic.py +0 -0
  607. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  608. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_test.py +0 -0
  609. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  610. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_test_runner_baseline.py +0 -0
  611. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_test_runner_populated_home.py +0 -0
  612. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_test_runner_routing.py +0 -0
  613. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_test_runner_toolchain.py +0 -0
  614. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_uat.py +0 -0
  615. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coord_web_sse_restart_live.py +0 -0
  616. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_coordinator_machine.py +0 -0
  617. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_cross_platform_imports.py +0 -0
  618. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dao.py +0 -0
  619. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dashboard.py +0 -0
  620. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dashboard_api.py +0 -0
  621. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dashboard_fixture.py +0 -0
  622. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dashboard_server.py +0 -0
  623. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dashboard_terminal.py +0 -0
  624. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dashboard_terminal_live.py +0 -0
  625. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_db.py +0 -0
  626. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dead_end.py +0 -0
  627. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_decomposition_chat.py +0 -0
  628. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_coord_db_backup.py +0 -0
  629. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_coord_web_dist.py +0 -0
  630. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_coord_web_rollback.py +0 -0
  631. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_db_backup_unit.py +0 -0
  632. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_drive_queue_unit.py +0 -0
  633. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_failure_notify_unit.py +0 -0
  634. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_manifest.py +0 -0
  635. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_notify_unit.py +0 -0
  636. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_units_lane.py +0 -0
  637. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deploy_web_unit.py +0 -0
  638. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deprecation_telemetry.py +0 -0
  639. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_deps.py +0 -0
  640. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_diagnose.py +0 -0
  641. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dispatch.py +0 -0
  642. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dispatch_liveness.py +0 -0
  643. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dispatch_target_validation.py +0 -0
  644. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dispatch_workers.py +0 -0
  645. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dist_name.py +0 -0
  646. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_done_housekeeping.py +0 -0
  647. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dr_azure_scripts.py +0 -0
  648. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dr_promote.py +0 -0
  649. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_dr_verify.py +0 -0
  650. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive.py +0 -0
  651. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_machine_fault.py +0 -0
  652. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue.py +0 -0
  653. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue_blocked_rendering.py +0 -0
  654. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue_launch_argv.py +0 -0
  655. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue_max_parallel_config.py +0 -0
  656. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  657. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue_roll_pending.py +0 -0
  658. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  659. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_state.py +0 -0
  660. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_drive_tmux.py +0 -0
  661. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_epic_up_capability_detection.py +0 -0
  662. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  663. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_epic_up_image_provenance.py +0 -0
  664. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_errors.py +0 -0
  665. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_events.py +0 -0
  666. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_failure_class.py +0 -0
  667. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_failure_classifier.py +0 -0
  668. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_filelock.py +0 -0
  669. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  670. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_fix_escalation_classifier.py +0 -0
  671. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_fix_of_force_override.py +0 -0
  672. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_fleet_config_health.py +0 -0
  673. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_fleet_health_probes.py +0 -0
  674. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_fleet_health_snapshot.py +0 -0
  675. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_fleet_watchdog.py +0 -0
  676. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_forge_availability.py +0 -0
  677. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_freshness.py +0 -0
  678. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_gate_a.py +0 -0
  679. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_gate_b.py +0 -0
  680. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_gate_snapshot_staleness.py +0 -0
  681. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_gates.py +0 -0
  682. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  683. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_gen_mock_index.py +0 -0
  684. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_generated_rust_fixture.py +0 -0
  685. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_generated_rust_requests.py +0 -0
  686. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_generated_types_fixture.py +0 -0
  687. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_github_ops.py +0 -0
  688. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_github_throttle.py +0 -0
  689. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_goal.py +0 -0
  690. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_graph_health.py +0 -0
  691. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_graph_selfheal_absent_2237.py +0 -0
  692. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_handoff.py +0 -0
  693. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_checks.py +0 -0
  694. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_cli.py +0 -0
  695. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_cli_graph.py +0 -0
  696. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_config.py +0 -0
  697. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_context.py +0 -0
  698. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_coord_tui_ci_pin.py +0 -0
  699. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_coord_web_ci_pin.py +0 -0
  700. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_deploy_lane_facts.py +0 -0
  701. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_fix.py +0 -0
  702. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_incident_regression.py +0 -0
  703. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_issues_sync_staleness.py +0 -0
  704. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_pr_churn.py +0 -0
  705. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_pypi.py +0 -0
  706. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_registry.py +0 -0
  707. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_release_cordon_probe.py +0 -0
  708. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_timer_active.py +0 -0
  709. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_toolchain.py +0 -0
  710. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_unit_drift.py +0 -0
  711. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_unit_enablement.py +0 -0
  712. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_health_wedged_drive_queue.py +0 -0
  713. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_hooks.py +0 -0
  714. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_housekeeping.py +0 -0
  715. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_human_attended_437.py +0 -0
  716. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_init.py +0 -0
  717. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_install_agent_venv_2911.py +0 -0
  718. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_integration.py +0 -0
  719. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_briefing_echo.py +0 -0
  720. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_pane_log_2541.py +0 -0
  721. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_prefill_state.py +0 -0
  722. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_session_relaunch.py +0 -0
  723. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_test_verdict_backstop.py +0 -0
  724. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_token_attribution.py +0 -0
  725. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_interactive_worktree.py +0 -0
  726. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_invariant_alarms.py +0 -0
  727. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_issue_store_seam.py +0 -0
  728. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_issues_sync_status.py +0 -0
  729. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_liveness_auditor.py +0 -0
  730. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_liveness_notify.py +0 -0
  731. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_lock_contention_ratchet.py +0 -0
  732. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_machine_fault.py +0 -0
  733. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_machine_metrics.py +0 -0
  734. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_machine_pause.py +0 -0
  735. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_machine_stats.py +0 -0
  736. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_merge_queue.py +0 -0
  737. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_merge_verify.py +0 -0
  738. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_milestone_chat.py +0 -0
  739. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_milestone_dispatch.py +0 -0
  740. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_milestone_gate.py +0 -0
  741. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_milestone_order.py +0 -0
  742. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_milestone_seam.py +0 -0
  743. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_mock_author.py +0 -0
  744. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_model_tiering.py +0 -0
  745. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_models.py +0 -0
  746. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_models_config_labels.py +0 -0
  747. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_needs_attention.py +0 -0
  748. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_network.py +0 -0
  749. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_new_issue_chat.py +0 -0
  750. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_next_release_tag.py +0 -0
  751. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_node_shim.py +0 -0
  752. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_baseline.py +0 -0
  753. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_cli.py +0 -0
  754. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_collect.py +0 -0
  755. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_config.py +0 -0
  756. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_drive_seam.py +0 -0
  757. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_isolation.py +0 -0
  758. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_predicate.py +0 -0
  759. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_quiet_hours.py +0 -0
  760. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notifier_service.py +0 -0
  761. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notify.py +0 -0
  762. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_notify_drain.py +0 -0
  763. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_openapi.py +0 -0
  764. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_operational_defaults.py +0 -0
  765. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_overlap_fence.py +0 -0
  766. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_overlap_predict.py +0 -0
  767. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_packaged_deploy_units.py +0 -0
  768. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_parentage.py +0 -0
  769. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_paste_landed.py +0 -0
  770. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  771. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_pipeline.py +0 -0
  772. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_plan_followup_approve_plan_command.py +0 -0
  773. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_plan_followup_pr_command.py +0 -0
  774. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_plan_followup_review_command.py +0 -0
  775. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_plan_only.py +0 -0
  776. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_plan_parser.py +0 -0
  777. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_platform_paths.py +0 -0
  778. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_portal_bridge.py +0 -0
  779. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_portal_config.py +0 -0
  780. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_portal_store.py +0 -0
  781. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_portal_sync.py +0 -0
  782. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_pr_body_lint.py +0 -0
  783. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_prereqs.py +0 -0
  784. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_production_db_guard.py +0 -0
  785. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_progress.py +0 -0
  786. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_provider_seam.py +0 -0
  787. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_providers.py +0 -0
  788. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_providers_config_labels.py +0 -0
  789. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_providers_pty.py +0 -0
  790. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_provision_core.py +0 -0
  791. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_provision_machine.py +0 -0
  792. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_py_rust_mirror_inventory.py +0 -0
  793. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_quiet_hours.py +0 -0
  794. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_quiet_hours_store_2146.py +0 -0
  795. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reap_merged_sessions.py +0 -0
  796. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reap_stale_interactive_tick.py +0 -0
  797. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile.py +0 -0
  798. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_branch.py +0 -0
  799. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_completions.py +0 -0
  800. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  801. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_merges.py +0 -0
  802. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_no_agent_record.py +0 -0
  803. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_tick.py +0 -0
  804. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reconcile_usage_limit_done.py +0 -0
  805. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_refine_chat.py +0 -0
  806. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_cordon_2101.py +0 -0
  807. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  808. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_cordon_deadlock_2240.py +0 -0
  809. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  810. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_cordon_stuck_2490.py +0 -0
  811. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_propagate.py +0 -0
  812. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_propagate_threshold.py +0 -0
  813. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_roll_between_legs_2854.py +0 -0
  814. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_roll_window_handoff.py +0 -0
  815. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_unified_1242.py +0 -0
  816. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_verify.py +0 -0
  817. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_release_window.py +0 -0
  818. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_remote_auto_prune.py +0 -0
  819. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_remote_interactive_reaper.py +0 -0
  820. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_repo_add.py +0 -0
  821. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_repo_dormancy.py +0 -0
  822. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_repo_edit_2220.py +0 -0
  823. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_repo_graph_fleet_2237.py +0 -0
  824. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_repo_onboard_2220.py +0 -0
  825. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_report_result_push.py +0 -0
  826. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_reports.py +0 -0
  827. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_retry.py +0 -0
  828. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_retry_advisory_1606.py +0 -0
  829. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_retry_escalation_classify_3360.py +0 -0
  830. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_retry_type_1636.py +0 -0
  831. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_revalidate.py +0 -0
  832. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review.py +0 -0
  833. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_end_review_without_verdict.py +0 -0
  834. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_parse_failure_diagnostic.py +0 -0
  835. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_reaffirm.py +0 -0
  836. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_state.py +0 -0
  837. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_verdict_backstop.py +0 -0
  838. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_verdict_override_audit.py +0 -0
  839. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_verdict_relay.py +0 -0
  840. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_review_zero_commits.py +0 -0
  841. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_scoped_review_wiring.py +0 -0
  842. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_scorecard.py +0 -0
  843. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_self_health.py +0 -0
  844. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_serve.py +0 -0
  845. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_serve_app.py +0 -0
  846. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_serve_app_board_trim.py +0 -0
  847. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_serve_rest_routes.py +0 -0
  848. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_session.py +0 -0
  849. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_slice_issue_attribution.py +0 -0
  850. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_smoke.py +0 -0
  851. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  852. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_smoke_live_checkout_restore.py +0 -0
  853. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_smoke_workflow.py +0 -0
  854. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_spend_ceiling.py +0 -0
  855. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_spend_ceiling_coordinator.py +0 -0
  856. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_split.py +0 -0
  857. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_split_work.py +0 -0
  858. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_sql_dialect.py +0 -0
  859. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_sqlite_connect_ratchet.py +0 -0
  860. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_stage_projection.py +0 -0
  861. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_stale_busy_reviewer_697.py +0 -0
  862. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_stalled_pipeline.py +0 -0
  863. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_state.py +0 -0
  864. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_state_review_findings_daemon.py +0 -0
  865. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_status_fleet_footer.py +0 -0
  866. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_stop_1567.py +0 -0
  867. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_store_contract.py +0 -0
  868. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_store_migrate.py +0 -0
  869. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_stuck.py +0 -0
  870. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  871. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_terminal_command.py +0 -0
  872. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_test_author.py +0 -0
  873. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_test_chat.py +0 -0
  874. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_test_orchestrator.py +0 -0
  875. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_test_report.py +0 -0
  876. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_test_verdict_parsing.py +0 -0
  877. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_test_verdict_transcript_floor.py +0 -0
  878. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_text_io_encoding_audit.py +0 -0
  879. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_thin_client_board_audit.py +0 -0
  880. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_thin_client_config_load_1080.py +0 -0
  881. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_thin_client_daemon_routing_906.py +0 -0
  882. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_throwaway_vm.py +0 -0
  883. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_tmux_host.py +0 -0
  884. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_tmux_session.py +0 -0
  885. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_transcript_floor.py +0 -0
  886. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_uat_checks.py +0 -0
  887. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_usage.py +0 -0
  888. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_usage_limits.py +0 -0
  889. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_usage_rollup.py +0 -0
  890. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_venv_live_install_2121.py +0 -0
  891. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_version_single_source.py +0 -0
  892. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_watch.py +0 -0
  893. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worker_env_venv_isolation.py +0 -0
  894. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worker_events.py +0 -0
  895. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worker_image_pin_sync.py +0 -0
  896. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worker_safety.py +0 -0
  897. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worker_test_scoping.py +0 -0
  898. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worktree.py +0 -0
  899. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  900. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/test_write_parity.py +0 -0
  901. {code_coordinator-0.5.498 → code_coordinator-0.5.500}/tests/write_parity.py +0 -0
@@ -111,12 +111,34 @@ jobs:
111
111
  # — the matrix axis there is Python versions on Linux; this job's axis is
112
112
  # the platform. See docs/CROSS_PLATFORM.md §9.
113
113
  windows:
114
- # #2039: on `push` (i.e. merges to main) only. On a `pull_request` event
115
- # this evaluates false and the job is SKIPPED — conclusion `skipped`,
116
- # which is already in `ci_store._PASSING_CONCLUSIONS`, so the merge gate
117
- # is satisfied rather than merely tolerant. `windows` is not a required
118
- # status check either, so branch protection is unaffected.
119
- if: github.event_name == 'push'
114
+ # #3394, 2026-09-18: taken out of automatic CI by operator decision —
115
+ # Windows is not current work. Everything in the block above about this
116
+ # being a real gate (#2000) remains true of the job's SHAPE and is
117
+ # deliberately left intact; what changed is WHEN it runs.
118
+ #
119
+ # Why: it has failed every run sampled back to 2026-09-10 (~614
120
+ # AssertionError plus WinError / BackupError / FileNotFoundError / OSError,
121
+ # concentrated in tests/test_dr_azure_scripts.py and tests/test_agent.py).
122
+ # A gate that is always red gates nothing — it only kept `main` permanently
123
+ # red, at ~85 min of runner time per push, and that permanent redness is
124
+ # what made coord mark every branch baseline-red and SKIP its test stage
125
+ # while the gate still reported `test: passed`. #3378 item 1, #3380 and
126
+ # #3385 were all scoped as "make main green" and all misattributed that
127
+ # redness to the (advisory) postgres job.
128
+ #
129
+ # The #2039 note this replaces still describes the restore target: on
130
+ # `push` only, so the job is SKIPPED on `pull_request` — conclusion
131
+ # `skipped`, already in `ci_store._PASSING_CONCLUSIONS`, so a red Windows
132
+ # run surfaces on main and never blocks a PR. `windows` is not a required
133
+ # status check either, so branch protection is unaffected in either shape.
134
+ #
135
+ # RESTORE by putting `github.event_name == 'push'` back here when Windows
136
+ # becomes active work — THEN fix the ~614 failures. Only once it is green
137
+ # is it a gate again. Do NOT add `continue-on-error` as a shortcut: #2026
138
+ # found that softens the run conclusion while the check still reports
139
+ # `failure` to the Checks API, which stalled the whole drive queue
140
+ # overnight on 2026-08-08.
141
+ if: github.event_name == 'workflow_dispatch'
120
142
  runs-on: windows-latest
121
143
  steps:
122
144
  - uses: actions/checkout@v4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.498
3
+ Version: 0.5.500
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.498
3
+ Version: 0.5.500
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
@@ -143,6 +143,7 @@ coord/repo_edit.py
143
143
  coord/repo_onboard.py
144
144
  coord/reports.py
145
145
  coord/rest_schema.py
146
+ coord/restart_cmd.py
146
147
  coord/revalidate.py
147
148
  coord/review.py
148
149
  coord/scorecard.py
@@ -541,6 +542,7 @@ tests/test_cli_status_merge_queue.py
541
542
  tests/test_cli_status_provider.py
542
543
  tests/test_cli_status_retried_3340.py
543
544
  tests/test_cli_status_review_finalizing.py
545
+ tests/test_cli_status_supervisor_3366.py
544
546
  tests/test_cli_status_test_failed_tag.py
545
547
  tests/test_cli_status_usage_limit.py
546
548
  tests/test_cli_sync_comments_873.py
@@ -786,6 +788,7 @@ tests/test_repo_graph_fleet_2237.py
786
788
  tests/test_repo_onboard_2220.py
787
789
  tests/test_report_result_push.py
788
790
  tests/test_reports.py
791
+ tests/test_restart_cmd.py
789
792
  tests/test_retry.py
790
793
  tests/test_retry_advisory_1606.py
791
794
  tests/test_retry_escalation_classify_3360.py
@@ -257,6 +257,7 @@
257
257
  "coord/repo_onboard.py",
258
258
  "coord/reports.py",
259
259
  "coord/rest_schema.py",
260
+ "coord/restart_cmd.py",
260
261
  "coord/revalidate.py",
261
262
  "coord/review.py",
262
263
  "coord/scorecard.py",
@@ -567,6 +568,7 @@
567
568
  "tests/test_cli_status_provider.py",
568
569
  "tests/test_cli_status_retried_3340.py",
569
570
  "tests/test_cli_status_review_finalizing.py",
571
+ "tests/test_cli_status_supervisor_3366.py",
570
572
  "tests/test_cli_status_test_failed_tag.py",
571
573
  "tests/test_cli_status_usage_limit.py",
572
574
  "tests/test_cli_sync_comments_873.py",
@@ -812,6 +814,7 @@
812
814
  "tests/test_repo_onboard_2220.py",
813
815
  "tests/test_report_result_push.py",
814
816
  "tests/test_reports.py",
817
+ "tests/test_restart_cmd.py",
815
818
  "tests/test_retry.py",
816
819
  "tests/test_retry_advisory_1606.py",
817
820
  "tests/test_retry_escalation_classify_3360.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.498",
2
+ "tag": "0.5.500",
3
3
  "distance": 0,
4
- "node": "g99081c11bad4947401aaeef6ccd4301a2b450952",
4
+ "node": "gd2476088b8684b908e08f1fbde1d3d82d3f02271",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-19"
@@ -7,6 +7,7 @@ import json
7
7
  import logging
8
8
  import os
9
9
  import re
10
+ import shutil
10
11
  import subprocess
11
12
  import sys
12
13
  import threading
@@ -20,7 +21,7 @@ from starlette.requests import Request
20
21
  from starlette.responses import JSONResponse, PlainTextResponse, Response, StreamingResponse
21
22
  from starlette.routing import Route
22
23
 
23
- from coord import __version__, agent_update
24
+ from coord import __version__, agent_update, restart_cmd
24
25
  from coord.agent import RUNNING, PENDING, AgentAssignment, AgentServer, AssignmentSpec
25
26
  from coord.dist_name import DistributionNotFoundError, resolve_installed, resolve_installed_name
26
27
  from coord.dist_name import pkg_spec as _dist_pkg_spec
@@ -129,8 +130,13 @@ def _running_under_systemd() -> bool:
129
130
  ``INVOCATION_ID`` is set by systemd for every unit invocation (since
130
131
  v232) and is the standard "am I running under systemd" signal — unlike
131
132
  checking the parent PID, it survives the process being reparented.
133
+
134
+ Delegates to :mod:`coord.restart_cmd` (#3366) — the single place that
135
+ answers this, shared with the SSH-side escalation and every
136
+ operator-facing remediation string, so this process's own idea of its
137
+ supervisor can never drift from what those tell an operator.
132
138
  """
133
- return bool(os.environ.get("INVOCATION_ID"))
139
+ return restart_cmd.running_under_systemd()
134
140
 
135
141
 
136
142
  def _systemctl_env() -> dict[str, str]:
@@ -1157,6 +1163,12 @@ def build_app(
1157
1163
  # liveness or PID.
1158
1164
  data["version"] = __version__
1159
1165
  data["installed_version"] = _installed_version()
1166
+ # #3366: this process's own live self-report of what supervises
1167
+ # it — "systemd", "launchd", or null when neither is known (a dev
1168
+ # box, Windows). The freshest possible answer to "what restarts
1169
+ # this host," ahead of any static config an operator may also set
1170
+ # (see `coord.restart_cmd.resolve_supervisor`).
1171
+ data["supervisor"] = restart_cmd.local_supervisor()
1160
1172
  # Surface the most recent /update attempt so the CLI can show
1161
1173
  # "0.3.0 → 0.4.0" or "no_change (0.3.0)" or "failed: <error>".
1162
1174
  last = _read_last_update(server.state_dir)
@@ -1625,6 +1637,33 @@ def build_app(
1625
1637
  body = {}
1626
1638
  dry_run = bool(body.get("dry_run"))
1627
1639
 
1640
+ # #3366: this whole lane is systemd-unit management — on a host
1641
+ # with no `systemctl` at all (every macOS agent today; #1158's
1642
+ # launchd port ships no unit-file equivalent) every one of the
1643
+ # packaged units reads as "new"/"not installed here", every run,
1644
+ # forever. That is not drift, it is the platform, and reporting it
1645
+ # as drift-adjacent noise on every propagation trains the operator
1646
+ # to ignore this lane. Short-circuit with an honest n/a instead of
1647
+ # calling into `du.install_units`, which has no way to tell "not
1648
+ # installed yet" apart from "cannot ever be installed here".
1649
+ if shutil.which("systemctl") is None:
1650
+ supervisor = restart_cmd.local_supervisor()
1651
+ return JSONResponse(
1652
+ {
1653
+ "ok": True,
1654
+ "units": [],
1655
+ "dry_run": dry_run,
1656
+ "reloaded": False,
1657
+ "reload_detail": "",
1658
+ "timers_enabled": {},
1659
+ "detail": (
1660
+ f"n/a — no systemd on this host (supervisor: "
1661
+ f"{supervisor or 'unknown'})"
1662
+ ),
1663
+ },
1664
+ status_code=200,
1665
+ )
1666
+
1628
1667
  report = du.install_units(
1629
1668
  machine_name=getattr(server, "machine_name", None),
1630
1669
  port=AGENT_PORT,
@@ -1714,12 +1753,20 @@ def build_app(
1714
1753
  )
1715
1754
 
1716
1755
  if not _running_under_systemd():
1756
+ # #3366: name the actual supervisor, when known, instead of
1757
+ # only ever saying what this ISN'T (systemd) — a launchd host
1758
+ # reads as clearly out of scope for a systemd-only lane rather
1759
+ # than as unexplained drift-adjacent noise on every run.
1760
+ supervisor = restart_cmd.local_supervisor()
1717
1761
  return JSONResponse(
1718
1762
  {
1719
1763
  "units": {},
1720
1764
  "detail": (
1721
- "this agent is not running under systemd — nothing here "
1722
- "can restart a sibling unit"
1765
+ f"this agent runs under {supervisor}, not systemd — "
1766
+ "nothing here can restart a sibling unit"
1767
+ if supervisor
1768
+ else "this agent is not running under systemd — nothing "
1769
+ "here can restart a sibling unit"
1723
1770
  ),
1724
1771
  },
1725
1772
  status_code=200,
@@ -85,6 +85,7 @@ import sys
85
85
  from dataclasses import dataclass
86
86
  from pathlib import Path
87
87
 
88
+ from coord import restart_cmd
88
89
  from coord.platform_paths import venv_exe, venv_pip, venv_python
89
90
 
90
91
  _log = logging.getLogger(__name__)
@@ -698,8 +699,8 @@ def perform_update(
698
699
  f"and rebuild — {listed}. Replacing a running process's "
699
700
  "site-packages leaves it executing a mix of two versions (the "
700
701
  "2026-08-11 dellserver incident, #2121). Restart or stop those "
701
- "processes — `systemctl --user restart coord-agent` for the "
702
- "agent — and retry.",
702
+ f"processes — {restart_cmd.restart_hint(restart_cmd.local_supervisor())} "
703
+ "for the agent — and retry.",
703
704
  holders=[
704
705
  {"pid": h.pid, "source": h.source, "cmdline": h.cmdline}
705
706
  for h in holders[:20]
@@ -16,7 +16,7 @@ from typing import TYPE_CHECKING, Any
16
16
  import click
17
17
  import httpx
18
18
 
19
- from coord import __version__
19
+ from coord import __version__, restart_cmd
20
20
  # Aliased: `agent_update` is also the name of this module's click command.
21
21
  from coord.agent_update import cli_initiator as _cli_initiator
22
22
  from coord.config import Config
@@ -726,10 +726,12 @@ def agent_update(
726
726
  err = outcome.get("error") or "pip failed; see ~/.coord/last_update.log"
727
727
  click.echo(f" {machine.name}: ✗ failed — {err}", err=True)
728
728
  elif outcome.get("escalated"):
729
+ hint = restart_cmd.resolve_supervisor(machine, live=outcome.get("supervisor"))
729
730
  click.echo(
730
731
  f" {machine.name}: ✗ pip upgraded to {target_version} but the "
731
- f"process is stuck reporting {version_now} even after a "
732
- "`systemctl --user restart` — needs manual investigation",
732
+ f"process is stuck reporting {version_now} even after a driven "
733
+ f"restart ({restart_cmd.restart_shell_command(hint)}) — needs "
734
+ "manual investigation",
733
735
  err=True,
734
736
  )
735
737
  elif not outcome.get("came_online"):
@@ -743,12 +745,15 @@ def agent_update(
743
745
  # Distinguishing this from a bare "still reporting X"
744
746
  # is the whole point: it says the process needs a
745
747
  # restart, not another pip attempt.
748
+ hint = restart_cmd.resolve_supervisor(
749
+ machine, live=outcome.get("supervisor")
750
+ )
746
751
  click.echo(
747
752
  f" {machine.name}: ✗ installed {installed_now} but the "
748
753
  f"running process still reports {version_now} (expected "
749
754
  f"{target_version}) — it hasn't restarted since the "
750
- "update; try `systemctl --user restart coord-agent` "
751
- "on that machine",
755
+ f"update; try {restart_cmd.restart_hint(hint)} on that "
756
+ "machine",
752
757
  err=True,
753
758
  )
754
759
  else:
@@ -1169,6 +1174,7 @@ def _wait_agents_updated(
1169
1174
  "result": None,
1170
1175
  "error": None,
1171
1176
  "escalated": False,
1177
+ "supervisor": None,
1172
1178
  }
1173
1179
  for m in machines
1174
1180
  }
@@ -1199,6 +1205,11 @@ def _wait_agents_updated(
1199
1205
  info["result"] = last.get("result")
1200
1206
  info["error"] = last.get("error")
1201
1207
  info["version_before"] = last.get("version_before")
1208
+ # #3366: the agent's own live self-report — when this ever
1209
+ # disagrees with the machine's static `supervisor:` config, this
1210
+ # wins (see `restart_cmd.resolve_supervisor`), because it's the
1211
+ # host answering right now, not a fact someone typed once.
1212
+ info["supervisor"] = health.get("supervisor")
1202
1213
 
1203
1214
  if machine.name in pre:
1204
1215
  pre_val = pre[machine.name]
@@ -1255,7 +1266,8 @@ def _wait_agents_updated(
1255
1266
 
1256
1267
 
1257
1268
  def _escalate_restart(machine) -> bool:
1258
- """Best-effort ``systemctl --user restart coord-agent`` over SSH.
1269
+ """Best-effort driven restart of ``coord-agent`` over SSH — systemd or
1270
+ launchd, whichever the target host actually runs (#3366).
1259
1271
 
1260
1272
  #404 / #1568: ``/update``'s ``os.execv`` self-restart does not take
1261
1273
  under systemd — same PID, stale version. ``XDG_RUNTIME_DIR=/run/user/
@@ -1263,17 +1275,44 @@ def _escalate_restart(machine) -> bool:
1263
1275
  silently no-ops in a non-interactive SSH session. See
1264
1276
  docs/AGENT_OPERATIONS.md for the manual runbook this automates.
1265
1277
 
1266
- Returns True if the ssh command itself exited 0 — NOT whether the
1267
- agent actually came back on the new version; the caller re-polls
1268
- /health afterwards to confirm that.
1278
+ #3366: macOS ships no systemd at all, so the command above always
1279
+ failed there — this was the whole escalation channel, and a fleet mac
1280
+ (``docs/MAC_MINI.md``) simply had none: no automated recovery, and
1281
+ every operator-facing message also only ever named ``systemctl``. The
1282
+ working command is ``launchctl kickstart -k gui/<uid>/<label>``
1283
+ (:mod:`coord.restart_cmd`). Rather than branching ahead of time on
1284
+ possibly-stale config, the remote shell tries systemd FIRST — zero
1285
+ behaviour change for the rest of the fleet — and only falls back to
1286
+ launchd when ``systemctl`` genuinely isn't there to ask, discovering
1287
+ the real launchd Label from the host's own plist (falling back to
1288
+ :data:`coord.restart_cmd.LAUNCHD_LABEL` only if that read fails) so
1289
+ this keeps working even if a second mac ever uses a different label.
1290
+
1291
+ Returns True if a restart command itself exited 0 on the target host —
1292
+ NOT whether the agent actually came back on the new version; the
1293
+ caller re-polls /health afterwards to confirm that.
1269
1294
  """
1295
+ from coord.restart_cmd import LAUNCHD_LABEL # noqa: PLC0415
1296
+
1297
+ remote_script = (
1298
+ "if command -v systemctl >/dev/null 2>&1 && "
1299
+ "XDG_RUNTIME_DIR=/run/user/$(id -u) systemctl --user restart coord-agent "
1300
+ "2>/dev/null; then exit 0; fi; "
1301
+ 'plist=$(ls "$HOME/Library/LaunchAgents"/*coord-agent*.plist 2>/dev/null | head -1); '
1302
+ 'if [ -n "$plist" ]; then '
1303
+ "label=$(/usr/libexec/PlistBuddy -c 'Print :Label' \"$plist\" 2>/dev/null); "
1304
+ f'label="${{label:-{LAUNCHD_LABEL}}}"; '
1305
+ 'exec launchctl kickstart -k "gui/$(id -u)/$label"; '
1306
+ "fi; "
1307
+ "exit 1"
1308
+ )
1270
1309
  cmd = [
1271
1310
  "ssh",
1272
1311
  "-o", "BatchMode=yes",
1273
1312
  "-o", "ConnectTimeout=10",
1274
1313
  "-o", "StrictHostKeyChecking=accept-new",
1275
1314
  machine.host,
1276
- "XDG_RUNTIME_DIR=/run/user/$(id -u) systemctl --user restart coord-agent",
1315
+ remote_script,
1277
1316
  ]
1278
1317
  try:
1279
1318
  result = subprocess.run(cmd, capture_output=True, text=True, timeout=20)
@@ -24,6 +24,7 @@ from typing import Any
24
24
 
25
25
  import click
26
26
 
27
+ from coord import restart_cmd
27
28
  from coord.commands._common import _CONFIG_OPTION
28
29
 
29
30
 
@@ -1746,6 +1747,14 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1746
1747
  + ", ".join(spared)
1747
1748
  )
1748
1749
 
1750
+ # #3365: the version each targeted host was on BEFORE this run's
1751
+ # forward roll — i.e. exactly the version a rollback puts it back
1752
+ # on. `before` is the pre-roll verify sweep already paid for in
1753
+ # step 3, so this is a read, not a new probe. Passed through so
1754
+ # `_wait_agent_back` can assert on that version rather than on mere
1755
+ # liveness — see its docstring for why liveness alone lied here.
1756
+ pre_roll_versions = _python_lane_versions(before, targets, record.target_version)
1757
+
1749
1758
  down: list[str] = []
1750
1759
  for host in targets:
1751
1760
  machine = by_name.get(host)
@@ -1756,6 +1765,7 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1756
1765
  initiator=cli_initiator(
1757
1766
  f"coord release propagate -> {machine.name} rollback (red gate)"
1758
1767
  ),
1768
+ expected_version=pre_roll_versions.get(host),
1759
1769
  )
1760
1770
  record.rolled_back.append(f"{host}: {detail}")
1761
1771
  if not ok:
@@ -1770,9 +1780,11 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
1770
1780
  "ROLLBACK LEFT AGENTS DOWN: "
1771
1781
  + ", ".join(down)
1772
1782
  + " — these hosts answered the rollback but never came back "
1773
- "on /health, and an SSH `systemctl --user restart "
1774
- "coord-agent` did not revive them either. Recover by hand "
1775
- "before anything else."
1783
+ "on /health, and a driven SSH restart (systemd "
1784
+ f"({restart_cmd.restart_shell_command(restart_cmd.SYSTEMD)}) or "
1785
+ f"launchd ({restart_cmd.restart_shell_command(restart_cmd.LAUNCHD)}), "
1786
+ "whichever applies) did not revive them either. Recover by "
1787
+ "hand before anything else."
1776
1788
  )
1777
1789
  click.echo(f"error: {record.error}", err=True)
1778
1790
  _finish(rp.STATUS_ROLLED_BACK, 2)
@@ -2706,6 +2718,16 @@ def _roll_units(machine, *, agent_port: int) -> tuple[bool | None, str]:
2706
2718
  # report" / a false-positive success.
2707
2719
  if status != 200 and not (status == 500 and "units" in body):
2708
2720
  return False, str(body.get("error") or body.get("summary") or f"HTTP {status}")
2721
+ # #3366: the agent itself already told us this host has no systemd to
2722
+ # deploy units onto (see `agent_app.py`'s `deploy_units` handler) —
2723
+ # every packaged unit reading as "new"/"not installed here" on THAT
2724
+ # host, every run, is the platform, not drift, so this is a structural
2725
+ # gap like the pre-#1835 404 branch above, not a failed lane: `None`,
2726
+ # same "not accountable for a lane it cannot roll" verdict #2052
2727
+ # already established for that case.
2728
+ detail = str(body.get("detail") or "")
2729
+ if detail.startswith("n/a"):
2730
+ return None, detail
2709
2731
  units = body.get("units") or []
2710
2732
  changed = [u.get("name") for u in units if u.get("action") == "updated"]
2711
2733
  new = [u.get("name") for u in units if u.get("action") == "new"]
@@ -2935,34 +2957,98 @@ def _get(url: str, *, timeout: float) -> tuple[int | None, dict]:
2935
2957
  return resp.status_code, (body if isinstance(body, dict) else {})
2936
2958
 
2937
2959
 
2938
- def _wait_agent_back(machine, *, agent_port: int, timeout: float) -> tuple[bool, str]:
2939
- """Poll ``/health`` until the agent answers again. ``(back, version)``.
2960
+ def _wait_agent_back(
2961
+ machine, *, agent_port: int, timeout: float,
2962
+ expected_version: str | None = None, require_change: bool = True,
2963
+ ) -> tuple[bool, str]:
2964
+ """Poll ``/health`` until the agent answers again ON THE POST-ROLLBACK
2965
+ VERSION — never on the first 200, which may still be the not-yet-re-execed
2966
+ OLD process. ``(back, version)``.
2940
2967
 
2941
2968
  A rollback re-execs the agent process, and #2052 fault 1 is what happens
2942
2969
  when that re-exec does not take: precision's ``coord-agent`` went
2943
2970
  ``inactive (dead)`` at the moment of the rollback and stayed there until
2944
2971
  a human noticed. "The POST was accepted" is therefore not an outcome —
2945
2972
  the outcome is whether the service is serving again.
2973
+
2974
+ #3365: "serving again" turned out not to be a strong enough condition
2975
+ either. Between the accepted ``POST /rollback`` and the re-exec actually
2976
+ taking, the OLD process is still listening and answers 200 with the
2977
+ *pre-rollback* version — a liveness signal indistinguishable from success
2978
+ at the moment it's observed. Reporting the first 200's version asserted
2979
+ the opposite of what happened: four hosts rolled back to 0.5.479 all
2980
+ reported "serving again on v0.5.482", the version they'd just been rolled
2981
+ away from. Liveness alone cannot tell "the new process is up" from "the
2982
+ old process hasn't gone down yet" — both are a 200 — so this now asserts
2983
+ on version identity instead, the same fix #1568 made for the forward
2984
+ ``/update`` wait (:func:`coord.commands.agent_ops._wait_agents_updated`):
2985
+
2986
+ * When the caller knows the destination version — the rollback path in
2987
+ ``coord release propagate`` reads it straight out of the pre-roll
2988
+ ``before`` snapshot, the same version this host is rolling back TO —
2989
+ pass it as *expected_version* and this polls until ``/health`` reports
2990
+ exactly that, never returning True for anything else. The version
2991
+ printed by the caller is then the version verified, by construction.
2992
+ * When the caller has no such snapshot (``coord release rollback``, the
2993
+ manual break-glass command, has no forward-roll record to read a
2994
+ target version from) AND *require_change* is left at its default
2995
+ ``True``, the first 200 seen is recorded as a baseline to RULE OUT
2996
+ rather than proof of success — it is exactly the reading a still-live
2997
+ old process would produce — and this waits for a *different* version
2998
+ to show up before returning True. A process that never re-execs keeps
2999
+ answering the same baseline version for the whole window and
3000
+ correctly times out False, instead of the old bug's instant (wrong)
3001
+ True on the first answer.
3002
+ * *require_change* exists for :func:`_rollback_host`'s retry-after-SSH-
3003
+ escalation call. That escalation only ever runs after a FULL prior
3004
+ window of nothing but non-200s — the ambiguity above (an old process
3005
+ that never went away) cannot apply, because the polling already
3006
+ proved for one whole ``timeout`` that nothing was answering. Reusing
3007
+ the version-change requirement there would demand a signal
3008
+ (a version DIFFERENT from a baseline that was never even set) this
3009
+ call has no way to produce, and wrongly fail a host a hard
3010
+ ``systemctl --user restart`` genuinely revived.
2946
3011
  """
2947
3012
  import time # noqa: PLC0415
2948
3013
 
2949
3014
  deadline = time.time() + max(timeout, 1.0)
2950
3015
  poll = min(2.0, max(timeout / 10, 0.05))
3016
+ baseline: str | None = None # only used when expected_version is None
3017
+ last_version = "?"
2951
3018
  while True:
2952
3019
  status, body = _get(f"http://{machine.host}:{agent_port}/health", timeout=3.0)
2953
3020
  if status == 200:
2954
- return True, str(body.get("version") or "?")
3021
+ version = str(body.get("version") or "?")
3022
+ last_version = version
3023
+ if expected_version is not None:
3024
+ if version == expected_version:
3025
+ return True, version
3026
+ elif not require_change:
3027
+ return True, version
3028
+ elif baseline is None:
3029
+ baseline = version
3030
+ elif version != baseline:
3031
+ return True, version
2955
3032
  if time.time() >= deadline:
2956
- return False, "?"
3033
+ return False, last_version
2957
3034
  time.sleep(poll)
2958
3035
 
2959
3036
 
2960
3037
  def _rollback_host(
2961
- machine, *, agent_port: int, timeout: float = 90.0, initiator: str | None = None
3038
+ machine, *, agent_port: int, timeout: float = 90.0, initiator: str | None = None,
3039
+ expected_version: str | None = None,
2962
3040
  ) -> tuple[bool, str]:
2963
3041
  """POST /rollback — back to the previous blue/green generation (#1241) —
2964
3042
  and then put the service back on its feet.
2965
3043
 
3044
+ #3365: *expected_version*, when the caller has one (the pre-roll version
3045
+ read for this host before the forward roll that's now being undone —
3046
+ see the ``coord release propagate`` rollback loop), is threaded straight
3047
+ through to :func:`_wait_agent_back` so the wait asserts on THAT version
3048
+ rather than on mere liveness. Without it, ``_wait_agent_back`` falls
3049
+ back to its own baseline-diff check — see its docstring — rather than
3050
+ this function inventing a second version-identity scheme.
3051
+
2966
3052
  #2052 fault 1: "a rollback that stops a service and does not restore it
2967
3053
  leaves the fleet worse off than the failed roll did." This used to return
2968
3054
  True the instant the agent answered 202, which is a statement about the
@@ -3020,7 +3106,10 @@ def _rollback_host(
3020
3106
  # service THIS call took down.
3021
3107
  return True, f"{note}; {sib_detail}"
3022
3108
 
3023
- back, version = _wait_agent_back(machine, agent_port=agent_port, timeout=timeout)
3109
+ back, version = _wait_agent_back(
3110
+ machine, agent_port=agent_port, timeout=timeout,
3111
+ expected_version=expected_version,
3112
+ )
3024
3113
  if back:
3025
3114
  return _back_on_target(f"rolled back; agent is serving again on v{version}")
3026
3115
 
@@ -3030,12 +3119,14 @@ def _rollback_host(
3030
3119
  escalated = _escalate_restart(machine)
3031
3120
  if escalated:
3032
3121
  back, version = _wait_agent_back(
3033
- machine, agent_port=agent_port, timeout=min(timeout, 60.0)
3122
+ machine, agent_port=agent_port, timeout=min(timeout, 60.0),
3123
+ expected_version=expected_version, require_change=False,
3034
3124
  )
3035
3125
  if back:
3036
3126
  return _back_on_target(
3037
- f"rolled back; agent needed an SSH `systemctl --user restart "
3038
- f"coord-agent` but is serving again on v{version}"
3127
+ "rolled back; agent needed a driven SSH restart "
3128
+ f"({restart_cmd.restart_hint(restart_cmd.resolve_supervisor(machine))}) "
3129
+ f"but is serving again on v{version}"
3039
3130
  )
3040
3131
  return False, (
3041
3132
  "rolled back the venv but the agent is DOWN — it never came back on "
@@ -3043,8 +3134,9 @@ def _rollback_host(
3043
3134
  + (
3044
3135
  "the SSH restart did not revive it"
3045
3136
  if escalated
3046
- else "the SSH `systemctl --user restart coord-agent` escalation "
3047
- "could not run"
3137
+ else "the SSH "
3138
+ f"{restart_cmd.restart_hint(restart_cmd.resolve_supervisor(machine))} "
3139
+ "escalation could not run"
3048
3140
  )
3049
3141
  + f". Recover by hand on {machine.name}."
3050
3142
  )
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
10
10
 
11
11
  import click
12
12
 
13
- from coord import __version__, github_ops
13
+ from coord import __version__, github_ops, restart_cmd
14
14
 
15
15
  from coord.commands._common import _CONFIG_OPTION, _load_config
16
16
 
@@ -375,6 +375,16 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
375
375
  version_line = f" agent-version: {agent_version} ⚠ (coord is {__version__})"
376
376
  else:
377
377
  version_line = f" agent-version: {agent_version}"
378
+ # #3366: surface the non-default supervisor (launchd) up front,
379
+ # before it matters — "this agent is not running under systemd"
380
+ # used to only ever show up mid-incident, buried in a propagate
381
+ # run's output. Silent for the systemd case: that's every other
382
+ # machine in the fleet today, and naming it there would just be
383
+ # noise on every `coord status`.
384
+ live_supervisor = s.health.get("supervisor") if s.is_online and s.health else None
385
+ supervisor = restart_cmd.resolve_supervisor(m, live=live_supervisor)
386
+ if supervisor == restart_cmd.LAUNCHD:
387
+ version_line += " supervisor: launchd"
378
388
  click.echo(f" host: {m.host} repos: {repos}{version_line}")
379
389
 
380
390
  # #1886 Path B: `/health` exposes `installed_version` (a disk read
@@ -399,7 +409,7 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
399
409
  click.echo(
400
410
  f" ⚠ running v{running_version} but installed "
401
411
  f"v{installed_version} — process hasn't restarted since "
402
- "its last update (`systemctl --user restart coord-agent` "
412
+ f"its last update ({restart_cmd.restart_hint(supervisor)} "
403
413
  "on that machine, or `coord agent update` to retry)"
404
414
  )
405
415
 
@@ -3071,6 +3071,23 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
3071
3071
  entry.get("quiet_hours"), machine_index=i, machine_name=name,
3072
3072
  )
3073
3073
 
3074
+ # #3366: optional fact about which init system supervises this
3075
+ # host's `coord agent` — see `Machine.supervisor`'s docstring for
3076
+ # why it isn't inferred. Validated against the two names
3077
+ # `coord.restart_cmd` actually knows rather than left free-form,
3078
+ # so a typo (`launchD`, `Systemd`) fails config load loudly
3079
+ # instead of silently falling through to the systemd default the
3080
+ # same way an unset field does.
3081
+ machine_supervisor = entry.get("supervisor")
3082
+ if machine_supervisor is not None:
3083
+ if not isinstance(machine_supervisor, str) or machine_supervisor not in (
3084
+ "systemd", "launchd",
3085
+ ):
3086
+ raise ConfigError(
3087
+ f"machines[{i}].supervisor must be 'systemd' or 'launchd', "
3088
+ f"got {machine_supervisor!r}"
3089
+ )
3090
+
3074
3091
  # #3340: optional per-machine floor for the `/health` reachability
3075
3092
  # probe timeout — see `Machine.health_timeout`'s docstring for why
3076
3093
  # this exists instead of just raising `network.DEFAULT_TIMEOUT`.
@@ -3094,6 +3111,7 @@ def _parse_machines(raw: Any, repos: list[Repo]) -> list[Machine]:
3094
3111
  max_workers=machine_max_workers,
3095
3112
  quiet_hours=quiet_hours,
3096
3113
  health_timeout=machine_health_timeout,
3114
+ supervisor=machine_supervisor,
3097
3115
  )
3098
3116
  )
3099
3117
  return machines