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