code-coordinator 0.5.333__tar.gz → 0.5.334__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 (825) hide show
  1. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dashboard/index.html +6 -6
  5. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dashboard/server.py +137 -16
  6. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/fleet_snapshot.py +48 -0
  7. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dashboard.py +24 -17
  8. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dashboard_api.py +271 -1
  9. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dashboard_fixture.py +6 -2
  10. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.github/workflows/publish.yml +0 -0
  21. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.github/workflows/test.yml +0 -0
  22. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/.gitignore +0 -0
  23. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/CLAUDE.md +0 -0
  24. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/GOAL.md +0 -0
  25. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/LICENSE +0 -0
  26. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/MANIFEST.in +0 -0
  27. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/README.md +0 -0
  28. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/SOURCES.txt +0 -0
  29. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/dependency_links.txt +0 -0
  30. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/entry_points.txt +0 -0
  31. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/requires.txt +0 -0
  32. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/scm_file_list.json +0 -0
  33. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/code_coordinator.egg-info/top_level.txt +0 -0
  34. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/__init__.py +0 -0
  35. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/_board_mapping.py +0 -0
  36. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/acceptance.py +0 -0
  37. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/acceptance_drivers.py +0 -0
  38. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/agent.py +0 -0
  39. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/agent_app.py +0 -0
  40. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/agent_update.py +0 -0
  41. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/agents/opencode/.gitignore +0 -0
  42. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/agents/opencode/agents/work.md +0 -0
  43. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/agents/opencode/routing.jsonc +0 -0
  44. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/approved_work.py +0 -0
  45. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/audit.py +0 -0
  46. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/auto_loop.py +0 -0
  47. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/block_log.py +0 -0
  48. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/board_schema.py +0 -0
  49. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/board_service.py +0 -0
  50. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/board_wire.py +0 -0
  51. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/brain.py +0 -0
  52. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/branch_model.py +0 -0
  53. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/bug_intake.py +0 -0
  54. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/cargo_cache.py +0 -0
  55. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/ci_fix.py +0 -0
  56. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/ci_github.py +0 -0
  57. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/ci_gitlab.py +0 -0
  58. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/ci_store.py +0 -0
  59. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/claim.py +0 -0
  60. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/client.py +0 -0
  62. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/__init__.py +0 -0
  63. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/_common.py +0 -0
  64. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/acceptance.py +0 -0
  65. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/agent_ops.py +0 -0
  66. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/audit.py +0 -0
  67. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/chat.py +0 -0
  68. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/dispatch.py +0 -0
  69. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/dispatch_workers.py +0 -0
  70. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/drive.py +0 -0
  71. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/drive_queue.py +0 -0
  72. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/gate_a.py +0 -0
  73. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/gates.py +0 -0
  74. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/issues.py +0 -0
  75. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/lifecycle.py +0 -0
  76. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/machine.py +0 -0
  77. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/merge.py +0 -0
  78. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/pr.py +0 -0
  83. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/release.py +0 -0
  84. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/repo.py +0 -0
  85. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/report.py +0 -0
  86. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/review.py +0 -0
  87. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/scorecard.py +0 -0
  88. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/sessions.py +0 -0
  89. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/setup.py +0 -0
  90. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/status.py +0 -0
  91. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/store_migrate.py +0 -0
  92. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/config.py +0 -0
  97. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/confirm_test.py +0 -0
  99. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/conflict_fix.py +0 -0
  100. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dashboard/terminal.py +0 -0
  104. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/db.py +0 -0
  105. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dead_end.py +0 -0
  106. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/decomposition_chat.py +0 -0
  107. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/README.md +0 -0
  108. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-agent.service +0 -0
  109. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-db-backup.service +0 -0
  110. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-db-backup.sh +0 -0
  111. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-db-backup.timer +0 -0
  112. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-drive-queue.service +0 -0
  113. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-drive-queue.timer +0 -0
  114. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-failure-notify.service +0 -0
  115. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-fleet-watchdog.service +0 -0
  116. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  117. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-notify.service +0 -0
  118. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-notify.timer +0 -0
  119. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-release-propagate.service +0 -0
  120. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-release-propagate.timer +0 -0
  121. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-release-window.service +0 -0
  122. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-release-window.timer +0 -0
  123. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-serve.service +0 -0
  124. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-web-dist-build.service +0 -0
  125. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-web-dist-build.timer +0 -0
  126. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy/coord-web.service +0 -0
  127. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy_manifest.py +0 -0
  128. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deploy_units.py +0 -0
  129. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deprecation_telemetry.py +0 -0
  130. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/deps.py +0 -0
  131. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/diagnose.py +0 -0
  132. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dispatch.py +0 -0
  133. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/dist_name.py +0 -0
  134. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/drive.py +0 -0
  135. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/drive_queue.py +0 -0
  136. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/drive_state.py +0 -0
  137. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/events.py +0 -0
  138. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/failure_class.py +0 -0
  139. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/filelock.py +0 -0
  140. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/fleet_config_health.py +0 -0
  141. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/forge_availability.py +0 -0
  142. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/freshness.py +0 -0
  143. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/gate_a.py +0 -0
  144. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/gate_b.py +0 -0
  145. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/gate_snapshot.py +0 -0
  146. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/gates.py +0 -0
  147. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/github_ops.py +0 -0
  148. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/github_throttle.py +0 -0
  149. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/goal.py +0 -0
  150. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/graph_health.py +0 -0
  151. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/__init__.py +0 -0
  152. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/aggregate.py +0 -0
  153. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/__init__.py +0 -0
  154. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/_ci_pin.py +0 -0
  155. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/agent_install.py +0 -0
  156. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/cargo_targets.py +0 -0
  157. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/claude_binary.py +0 -0
  158. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  159. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/coord_web_ci_pin.py +0 -0
  160. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/deploy_lane_facts.py +0 -0
  161. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/disk.py +0 -0
  162. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/fleet_board.py +0 -0
  163. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  164. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/fleet_phantom.py +0 -0
  165. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/fleet_unit_drift.py +0 -0
  166. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/graph.py +0 -0
  167. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/graphify_cli.py +0 -0
  168. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/index_lock.py +0 -0
  169. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/issues_sync_staleness.py +0 -0
  170. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/plan_usage.py +0 -0
  171. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/release_cordon.py +0 -0
  172. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/repo_state.py +0 -0
  173. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/spawned_coord.py +0 -0
  174. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/stalled_pipeline.py +0 -0
  175. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/timer_active.py +0 -0
  176. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/toolchain.py +0 -0
  177. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/unit_drift.py +0 -0
  178. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/unit_enablement.py +0 -0
  179. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/wedged_drive_queue.py +0 -0
  180. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/checks/worktrees.py +0 -0
  181. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/cli.py +0 -0
  182. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/context.py +0 -0
  183. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/models.py +0 -0
  184. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/pypi.py +0 -0
  185. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/registry.py +0 -0
  186. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/render.py +0 -0
  187. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/health/units.py +0 -0
  188. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/hooks.py +0 -0
  189. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/housekeeping.py +0 -0
  190. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/interactive.py +0 -0
  191. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/issue_store.py +0 -0
  192. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/issues_sync_status.py +0 -0
  193. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/liveness_auditor.py +0 -0
  194. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/machine_metrics.py +0 -0
  195. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/machine_onboard.py +0 -0
  196. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/machine_pause.py +0 -0
  197. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/merge_queue.py +0 -0
  198. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/milestone_chat.py +0 -0
  199. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/milestone_dispatch.py +0 -0
  200. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/milestone_gate.py +0 -0
  201. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/milestone_order.py +0 -0
  202. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/mock_author.py +0 -0
  203. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/models.py +0 -0
  204. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/network.py +0 -0
  205. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/new_issue_chat.py +0 -0
  206. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/__init__.py +0 -0
  207. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/baseline.py +0 -0
  208. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/cli.py +0 -0
  209. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/collect.py +0 -0
  210. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/digest.py +0 -0
  211. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/models.py +0 -0
  212. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/predicate.py +0 -0
  213. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/service.py +0 -0
  214. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/store.py +0 -0
  215. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notifier/transport.py +0 -0
  216. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/notify.py +0 -0
  217. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/openapi.py +0 -0
  218. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/overlap_fence.py +0 -0
  219. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/overlap_predict.py +0 -0
  220. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/parentage.py +0 -0
  221. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/parentage_github.py +0 -0
  222. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/pipeline.py +0 -0
  223. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/plan_parser.py +0 -0
  224. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/plans.py +0 -0
  225. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/platform_paths.py +0 -0
  226. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/portal_bridge.py +0 -0
  227. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/portal_store.py +0 -0
  228. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/portal_sync.py +0 -0
  229. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/pr_body_lint.py +0 -0
  230. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/prereqs.py +0 -0
  231. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/progress.py +0 -0
  232. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/providers/__init__.py +0 -0
  233. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/providers/base.py +0 -0
  234. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/providers/claude.py +0 -0
  235. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/providers/claude_pty.py +0 -0
  236. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/providers/opencode.py +0 -0
  237. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/queue_diagnose.py +0 -0
  238. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/reconcile.py +0 -0
  239. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/reconcile_tick.py +0 -0
  240. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/refine_chat.py +0 -0
  241. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/release_cordon.py +0 -0
  242. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/release_propagate.py +0 -0
  243. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/release_verify.py +0 -0
  244. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/release_window.py +0 -0
  245. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/repo_dormancy.py +0 -0
  246. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/repo_edit.py +0 -0
  247. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/repo_onboard.py +0 -0
  248. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/reports.py +0 -0
  249. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/rest_schema.py +0 -0
  250. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/revalidate.py +0 -0
  251. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/review.py +0 -0
  252. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/scorecard.py +0 -0
  253. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/self_health.py +0 -0
  254. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/serve_app.py +0 -0
  255. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  256. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  257. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  258. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  260. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/portal-followup/SKILL.md +0 -0
  261. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/release-now/SKILL.md +0 -0
  262. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  263. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  264. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/skills/update-issue/SKILL.md +0 -0
  265. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/smoke.py +0 -0
  266. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/spend_ceiling.py +0 -0
  267. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/split_work.py +0 -0
  268. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/sql.py +0 -0
  269. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/stage_projection.py +0 -0
  270. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/state.py +0 -0
  271. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/store_migrate.py +0 -0
  272. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/test_author.py +0 -0
  273. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/test_chat.py +0 -0
  274. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/test_orchestrator.py +0 -0
  275. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/test_report.py +0 -0
  276. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/tui_release.py +0 -0
  277. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/usage.py +0 -0
  278. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/usage_limits.py +0 -0
  279. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/usage_rollup.py +0 -0
  280. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coord/worker_events.py +0 -0
  281. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/coordinator.example.yml +0 -0
  282. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-agent.service +0 -0
  283. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-db-backup.service +0 -0
  284. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-db-backup.sh +0 -0
  285. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-db-backup.timer +0 -0
  286. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-drive-queue.service +0 -0
  287. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-drive-queue.timer +0 -0
  288. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-failure-notify.service +0 -0
  289. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-failure-notify.sh +0 -0
  290. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-fleet-watchdog.service +0 -0
  291. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-fleet-watchdog.timer +0 -0
  292. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-notify.service +0 -0
  293. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-notify.timer +0 -0
  294. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-release-propagate.service +0 -0
  295. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-release-propagate.timer +0 -0
  296. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-release-window.service +0 -0
  297. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-release-window.timer +0 -0
  298. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-serve.service +0 -0
  299. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-web-dist-build.service +0 -0
  300. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-web-dist-build.sh +0 -0
  301. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-web-dist-build.timer +0 -0
  302. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-web-rollback.sh +0 -0
  303. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/coord-web.service +0 -0
  304. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/deploy/node-shim.sh +0 -0
  305. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ADR_COORD_TUI_CI.md +0 -0
  306. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  307. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ADR_COORD_WEB_CI.md +0 -0
  308. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ADR_COORD_WEB_DIST.md +0 -0
  309. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  310. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/AGENT_OPERATIONS.md +0 -0
  311. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ARCHITECTURE.md +0 -0
  312. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ARCH_SECURITY_GATES.md +0 -0
  313. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/COCKPIT.md +0 -0
  314. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/CONTROL_CENTER.md +0 -0
  315. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/COST_DISCIPLINE.md +0 -0
  316. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/CROSS_PLATFORM.md +0 -0
  317. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/CUSTOMER_FACING_APPS.md +0 -0
  318. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/CUSTOMER_PORTAL.md +0 -0
  319. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/DRIVE_QUEUE.md +0 -0
  320. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/EPHEMERAL_WORKERS.md +0 -0
  321. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/FORGE_MIGRATION.md +0 -0
  322. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/GRAPHIFY_SETUP.md +0 -0
  323. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ISSUE_GUIDANCE.md +0 -0
  324. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/MAC_MINI.md +0 -0
  325. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  326. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/NOTIFIER.md +0 -0
  327. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/OPENCODE_VERIFICATION.md +0 -0
  328. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/OPERATING_GOTCHAS.md +0 -0
  329. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/OPERATOR_GUIDES.md +0 -0
  330. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/ORACLE_LOOP.md +0 -0
  331. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/PHONE_WEBAPP.md +0 -0
  332. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/PIPELINE_V2.md +0 -0
  333. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/PLATFORM_EVOLUTION.md +0 -0
  334. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/SECOND_BACKEND.md +0 -0
  335. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/STORE_SERVICE.md +0 -0
  336. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  337. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/WEB_CONTROL_CENTER.md +0 -0
  338. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/WSL_WINDOWS_WORKER.md +0 -0
  339. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/mocks/web/README.md +0 -0
  340. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/mocks/web/_tokens.css +0 -0
  341. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/mocks/web/issue-detail.html +0 -0
  342. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/mocks/web/pipeline-narrow.html +0 -0
  343. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/docs/mocks/web/pipeline-wide.html +0 -0
  344. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/graphify-out/.gitignore +0 -0
  345. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/install-agent.sh +0 -0
  346. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/pyproject.toml +0 -0
  347. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/audit_review_verdict_overrides.py +0 -0
  348. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  349. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/build-worker-image.sh +0 -0
  350. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/coordinator-machine.py +0 -0
  351. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/epic-down.sh +0 -0
  352. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/epic-up.sh +0 -0
  353. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/preflight.sh +0 -0
  354. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/provision-worker.sh +0 -0
  355. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  356. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  357. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/azure-workers/verify-github-token.sh +0 -0
  358. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/check_gh_argv_containment.py +0 -0
  359. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/codegen.py +0 -0
  360. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/coord-test-runner.sh +0 -0
  361. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  362. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  363. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  364. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  365. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/coord-venv-rollback.sh +0 -0
  366. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/drive-batch.sh +0 -0
  367. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/extract-coord-tui.sh +0 -0
  368. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/fleet_watchdog.py +0 -0
  369. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/gen_board_fixture.py +0 -0
  370. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/gen_mock_index.py +0 -0
  371. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/next_release_tag.py +0 -0
  372. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/run_tests_in_populated_home.sh +0 -0
  373. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/run_tests_without_gh.sh +0 -0
  374. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/smoke_437_interactive.py +0 -0
  375. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/verify_878_review_capture.py +0 -0
  376. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/verify_release_published.py +0 -0
  377. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/scripts/verify_release_wheel.py +0 -0
  378. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/setup.cfg +0 -0
  379. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/SMOKE_SET.md +0 -0
  380. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/__init__.py +0 -0
  381. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-37/conftest.py +0 -0
  382. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-37/contract.md +0 -0
  383. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-37/manifest.yml +0 -0
  384. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  385. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  386. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-51/contract.md +0 -0
  387. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  388. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  389. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-51/manifest.yml +0 -0
  390. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  391. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-51/tsconfig.json +0 -0
  392. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  393. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/backends.py +0 -0
  394. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/conftest.py +0 -0
  395. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/board-pipeline-basic.json +0 -0
  396. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  397. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  398. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  399. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  400. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/all_pass.json +0 -0
  401. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  402. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/mixed_fail.json +0 -0
  403. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  404. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  405. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/skip.json +0 -0
  406. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/playwright/truncated.json +0 -0
  407. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  408. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  409. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  410. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  411. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  412. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  413. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  414. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  415. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_acceptance.py +0 -0
  416. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_acceptance_drivers.py +0 -0
  417. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent.py +0 -0
  418. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_api_error.py +0 -0
  419. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_app.py +0 -0
  420. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_branch_base.py +0 -0
  421. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_branch_capture.py +0 -0
  422. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_config_free_1712.py +0 -0
  423. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_deploy_units_endpoint.py +0 -0
  424. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_dirty_worktree.py +0 -0
  425. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  426. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_graph_self_heal.py +0 -0
  427. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_health_h3.py +0 -0
  428. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_idle_restart.py +0 -0
  429. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_push_failure.py +0 -0
  430. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_reap.py +0 -0
  431. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_repos_and_pull.py +0 -0
  432. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_restart_services_endpoint.py +0 -0
  433. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_skills_self_heal.py +0 -0
  434. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_startup_diagnostics.py +0 -0
  435. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_update.py +0 -0
  436. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_update_bluegreen.py +0 -0
  437. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_usage_limit.py +0 -0
  438. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_agent_zero_commit.py +0 -0
  439. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_ambient_home_isolation.py +0 -0
  440. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_approve_dependency_busy_2804.py +0 -0
  441. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_approve_reject_plan.py +0 -0
  442. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_approve_usage_gate.py +0 -0
  443. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_approved_work_2532.py +0 -0
  444. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_approved_work_2996.py +0 -0
  445. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_assignment_already_recorded_daemon.py +0 -0
  446. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_audit_log.py +0 -0
  447. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_audit_outcome.py +0 -0
  448. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_audit_query.py +0 -0
  449. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_auto_loop.py +0 -0
  450. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_auto_release_publish_2035.py +0 -0
  451. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_backend_selection.py +0 -0
  452. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_base_checkout_restore.py +0 -0
  453. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_block_log.py +0 -0
  454. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_cap_762.py +0 -0
  455. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_fixture.py +0 -0
  456. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_read_path.py +0 -0
  457. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_schema.py +0 -0
  458. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_service.py +0 -0
  459. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_state.py +0 -0
  460. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_board_wire.py +0 -0
  461. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_brain.py +0 -0
  462. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_branch_model.py +0 -0
  463. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_bug_intake.py +0 -0
  464. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_build_worker_image_env_update.py +0 -0
  465. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cargo_cache.py +0 -0
  466. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_check_gh_argv_containment.py +0 -0
  467. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_ci_acceptance_gate_1950.py +0 -0
  468. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_ci_fix.py +0 -0
  469. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_ci_gitlab.py +0 -0
  470. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_ci_parity_2091.py +0 -0
  471. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_ci_store.py +0 -0
  472. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_claim.py +0 -0
  473. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_claude_md_budget.py +0 -0
  474. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_acceptance.py +0 -0
  475. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_assign.py +0 -0
  476. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  477. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_assign_interactive_remote.py +0 -0
  478. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_assign_provider.py +0 -0
  479. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  480. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_audit.py +0 -0
  481. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_chat_continue.py +0 -0
  482. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_decide.py +0 -0
  483. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_diagnose_capability_rules.py +0 -0
  484. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_diagnose_config_provenance.py +0 -0
  485. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_diagnose_forge_availability.py +0 -0
  486. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_diagnose_graph.py +0 -0
  487. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_diagnose_self.py +0 -0
  488. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_diagnose_test_coverage.py +0 -0
  489. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_doctor.py +0 -0
  490. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_doctor_config_free_1801.py +0 -0
  491. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  492. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_drive.py +0 -0
  493. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_drive_queue.py +0 -0
  494. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_escalate.py +0 -0
  495. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_fix_headless_review.py +0 -0
  496. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_gate_a.py +0 -0
  497. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_install_drift.py +0 -0
  498. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_install_skills.py +0 -0
  499. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_issue_comment.py +0 -0
  500. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_issue_create_label.py +0 -0
  501. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_issue_reopen.py +0 -0
  502. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_issue_view_list.py +0 -0
  503. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_merge.py +0 -0
  504. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_assign.py +0 -0
  505. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_capture.py +0 -0
  506. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_chat_add_child.py +0 -0
  507. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_dispatch.py +0 -0
  508. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_gate_b.py +0 -0
  509. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_gate_c.py +0 -0
  510. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_order.py +0 -0
  511. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  512. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_milestone_ship.py +0 -0
  513. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_network.py +0 -0
  514. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_new_issue_chat.py +0 -0
  515. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_plans.py +0 -0
  516. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_portal.py +0 -0
  517. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_pr.py +0 -0
  518. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_pull_artifact.py +0 -0
  519. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_queue.py +0 -0
  520. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_reattach_sessions.py +0 -0
  521. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_refine_board.py +0 -0
  522. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_release_preflight.py +0 -0
  523. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_release_propagate.py +0 -0
  524. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_release_window.py +0 -0
  525. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_repo_2220.py +0 -0
  526. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  527. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_scorecard.py +0 -0
  528. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_set_review_findings.py +0 -0
  529. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_advisory_terminal.py +0 -0
  530. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_contested_tag.py +0 -0
  531. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_merge_queue.py +0 -0
  532. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_provider.py +0 -0
  533. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_review_finalizing.py +0 -0
  534. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_test_failed_tag.py +0 -0
  535. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_status_usage_limit.py +0 -0
  536. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_sync_comments_873.py +0 -0
  537. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_test_plan.py +0 -0
  538. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_track.py +0 -0
  539. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_tui_update.py +0 -0
  540. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cli_wait.py +0 -0
  541. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_client_base_install.py +0 -0
  542. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_client_resource_migration_1946.py +0 -0
  543. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_commands_common.py +0 -0
  544. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_comments.py +0 -0
  545. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_completion_summary.py +0 -0
  546. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_config.py +0 -0
  547. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_config_acceptance.py +0 -0
  548. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_config_audit.py +0 -0
  549. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_config_pricing.py +0 -0
  550. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  551. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_config_usage_gate.py +0 -0
  552. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_confirm_test.py +0 -0
  553. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_conflict_fix.py +0 -0
  554. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_conflict_fix_semantic.py +0 -0
  555. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  556. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_test.py +0 -0
  557. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  558. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_test_runner_baseline.py +0 -0
  559. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_test_runner_populated_home.py +0 -0
  560. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_test_runner_routing.py +0 -0
  561. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_test_runner_toolchain.py +0 -0
  562. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_uat.py +0 -0
  563. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coord_web_sse_restart_live.py +0 -0
  564. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_coordinator_machine.py +0 -0
  565. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_cross_platform_imports.py +0 -0
  566. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dao.py +0 -0
  567. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dashboard_terminal.py +0 -0
  568. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dashboard_terminal_live.py +0 -0
  569. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_db.py +0 -0
  570. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dead_end.py +0 -0
  571. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_decomposition_chat.py +0 -0
  572. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_coord_db_backup.py +0 -0
  573. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_coord_web_dist.py +0 -0
  574. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_coord_web_rollback.py +0 -0
  575. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_drive_queue_unit.py +0 -0
  576. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_failure_notify_unit.py +0 -0
  577. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_manifest.py +0 -0
  578. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_notify_unit.py +0 -0
  579. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_units_lane.py +0 -0
  580. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deploy_web_unit.py +0 -0
  581. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deprecation_telemetry.py +0 -0
  582. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_deps.py +0 -0
  583. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_diagnose.py +0 -0
  584. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dispatch.py +0 -0
  585. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dispatch_target_validation.py +0 -0
  586. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_dist_name.py +0 -0
  587. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_done_housekeeping.py +0 -0
  588. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive.py +0 -0
  589. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_queue.py +0 -0
  590. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_queue_blocked_rendering.py +0 -0
  591. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_queue_launch_argv.py +0 -0
  592. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  593. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_queue_roll_pending.py +0 -0
  594. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  595. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_state.py +0 -0
  596. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_drive_tmux.py +0 -0
  597. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_epic_up_capability_detection.py +0 -0
  598. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  599. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_epic_up_image_provenance.py +0 -0
  600. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_errors.py +0 -0
  601. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_events.py +0 -0
  602. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_failure_class.py +0 -0
  603. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_filelock.py +0 -0
  604. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  605. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_fix_of_force_override.py +0 -0
  606. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_fleet_config_health.py +0 -0
  607. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_fleet_health_probes.py +0 -0
  608. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_fleet_health_snapshot.py +0 -0
  609. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_fleet_watchdog.py +0 -0
  610. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_forge_availability.py +0 -0
  611. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_freshness.py +0 -0
  612. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_gate_a.py +0 -0
  613. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_gate_b.py +0 -0
  614. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_gate_snapshot_staleness.py +0 -0
  615. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_gates.py +0 -0
  616. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  617. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_gen_mock_index.py +0 -0
  618. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_generated_rust_fixture.py +0 -0
  619. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_generated_rust_requests.py +0 -0
  620. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_generated_types_fixture.py +0 -0
  621. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_github_ops.py +0 -0
  622. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_github_throttle.py +0 -0
  623. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_goal.py +0 -0
  624. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_graph_health.py +0 -0
  625. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_graph_selfheal_absent_2237.py +0 -0
  626. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_handoff.py +0 -0
  627. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_checks.py +0 -0
  628. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_cli.py +0 -0
  629. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_cli_graph.py +0 -0
  630. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_config.py +0 -0
  631. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_context.py +0 -0
  632. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_coord_tui_ci_pin.py +0 -0
  633. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_coord_web_ci_pin.py +0 -0
  634. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_deploy_lane_facts.py +0 -0
  635. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_fix.py +0 -0
  636. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_incident_regression.py +0 -0
  637. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_issues_sync_staleness.py +0 -0
  638. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_pypi.py +0 -0
  639. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_registry.py +0 -0
  640. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_release_cordon_probe.py +0 -0
  641. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_timer_active.py +0 -0
  642. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_toolchain.py +0 -0
  643. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_unit_drift.py +0 -0
  644. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_unit_enablement.py +0 -0
  645. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_health_wedged_drive_queue.py +0 -0
  646. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_hooks.py +0 -0
  647. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_human_attended_437.py +0 -0
  648. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_init.py +0 -0
  649. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_install_agent_venv_2911.py +0 -0
  650. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_integration.py +0 -0
  651. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_briefing_echo.py +0 -0
  652. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_pane_log_2541.py +0 -0
  653. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_prefill_state.py +0 -0
  654. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_session_relaunch.py +0 -0
  655. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_test_verdict_backstop.py +0 -0
  656. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_token_attribution.py +0 -0
  657. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_interactive_worktree.py +0 -0
  658. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_issue_store_seam.py +0 -0
  659. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_issues_sync_status.py +0 -0
  660. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_liveness_auditor.py +0 -0
  661. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_liveness_notify.py +0 -0
  662. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_lock_contention_ratchet.py +0 -0
  663. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_machine_metrics.py +0 -0
  664. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_machine_onboard.py +0 -0
  665. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_machine_pause.py +0 -0
  666. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_merge_queue.py +0 -0
  667. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_merge_verify.py +0 -0
  668. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_milestone_chat.py +0 -0
  669. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_milestone_dispatch.py +0 -0
  670. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_milestone_gate.py +0 -0
  671. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_milestone_order.py +0 -0
  672. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_milestone_seam.py +0 -0
  673. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_mock_author.py +0 -0
  674. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_model_tiering.py +0 -0
  675. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_models.py +0 -0
  676. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_models_config_labels.py +0 -0
  677. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_needs_attention.py +0 -0
  678. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_network.py +0 -0
  679. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_new_issue_chat.py +0 -0
  680. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_next_release_tag.py +0 -0
  681. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_node_shim.py +0 -0
  682. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_baseline.py +0 -0
  683. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_cli.py +0 -0
  684. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_collect.py +0 -0
  685. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_config.py +0 -0
  686. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_drive_seam.py +0 -0
  687. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_isolation.py +0 -0
  688. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_predicate.py +0 -0
  689. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_quiet_hours.py +0 -0
  690. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notifier_service.py +0 -0
  691. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notify.py +0 -0
  692. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_notify_drain.py +0 -0
  693. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_openapi.py +0 -0
  694. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_operational_defaults.py +0 -0
  695. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_overlap_fence.py +0 -0
  696. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_overlap_predict.py +0 -0
  697. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_packaged_deploy_units.py +0 -0
  698. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_parentage.py +0 -0
  699. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_paste_landed.py +0 -0
  700. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  701. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_pipeline.py +0 -0
  702. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_plan_followup_approve_plan_command.py +0 -0
  703. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_plan_followup_pr_command.py +0 -0
  704. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_plan_followup_review_command.py +0 -0
  705. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_plan_only.py +0 -0
  706. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_plan_parser.py +0 -0
  707. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_platform_paths.py +0 -0
  708. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_portal_bridge.py +0 -0
  709. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_portal_config.py +0 -0
  710. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_portal_store.py +0 -0
  711. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_portal_sync.py +0 -0
  712. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_pr_body_lint.py +0 -0
  713. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_prereqs.py +0 -0
  714. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_production_db_guard.py +0 -0
  715. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_progress.py +0 -0
  716. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_provider_seam.py +0 -0
  717. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_providers.py +0 -0
  718. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_providers_config_labels.py +0 -0
  719. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_providers_pty.py +0 -0
  720. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_py_rust_mirror_inventory.py +0 -0
  721. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_quiet_hours.py +0 -0
  722. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_quiet_hours_store_2146.py +0 -0
  723. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reap_merged_sessions.py +0 -0
  724. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reap_stale_interactive_tick.py +0 -0
  725. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile.py +0 -0
  726. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_branch.py +0 -0
  727. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_completions.py +0 -0
  728. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  729. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_merges.py +0 -0
  730. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_no_agent_record.py +0 -0
  731. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_tick.py +0 -0
  732. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reconcile_usage_limit_done.py +0 -0
  733. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_refine_chat.py +0 -0
  734. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_cordon_2101.py +0 -0
  735. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  736. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_cordon_deadlock_2240.py +0 -0
  737. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_cordon_stuck_2490.py +0 -0
  738. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_propagate.py +0 -0
  739. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_propagate_threshold.py +0 -0
  740. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_roll_between_legs_2854.py +0 -0
  741. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_roll_window_handoff.py +0 -0
  742. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_unified_1242.py +0 -0
  743. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_verify.py +0 -0
  744. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_release_window.py +0 -0
  745. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_remote_auto_prune.py +0 -0
  746. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_remote_interactive_reaper.py +0 -0
  747. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_repo_add.py +0 -0
  748. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_repo_dormancy.py +0 -0
  749. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_repo_edit_2220.py +0 -0
  750. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_repo_graph_fleet_2237.py +0 -0
  751. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_repo_onboard_2220.py +0 -0
  752. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_report_result_push.py +0 -0
  753. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_reports.py +0 -0
  754. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_retry.py +0 -0
  755. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_retry_advisory_1606.py +0 -0
  756. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_retry_type_1636.py +0 -0
  757. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_revalidate.py +0 -0
  758. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review.py +0 -0
  759. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_end_review_without_verdict.py +0 -0
  760. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_parse_failure_diagnostic.py +0 -0
  761. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_reaffirm.py +0 -0
  762. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_state.py +0 -0
  763. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_verdict_backstop.py +0 -0
  764. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_verdict_override_audit.py +0 -0
  765. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_verdict_relay.py +0 -0
  766. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_review_zero_commits.py +0 -0
  767. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_scoped_review_wiring.py +0 -0
  768. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_scorecard.py +0 -0
  769. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_self_health.py +0 -0
  770. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_serve.py +0 -0
  771. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_serve_app.py +0 -0
  772. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_serve_app_board_trim.py +0 -0
  773. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_serve_rest_routes.py +0 -0
  774. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_session.py +0 -0
  775. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_slice_issue_attribution.py +0 -0
  776. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_smoke.py +0 -0
  777. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_smoke_live_checkout_restore.py +0 -0
  778. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_smoke_workflow.py +0 -0
  779. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_spend_ceiling.py +0 -0
  780. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_spend_ceiling_coordinator.py +0 -0
  781. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_split.py +0 -0
  782. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_split_work.py +0 -0
  783. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_sql_dialect.py +0 -0
  784. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_sqlite_connect_ratchet.py +0 -0
  785. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_stage_projection.py +0 -0
  786. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_stale_busy_reviewer_697.py +0 -0
  787. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_stalled_pipeline.py +0 -0
  788. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_state.py +0 -0
  789. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_state_review_findings_daemon.py +0 -0
  790. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_status_fleet_footer.py +0 -0
  791. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_stop_1567.py +0 -0
  792. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_store_contract.py +0 -0
  793. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_store_migrate.py +0 -0
  794. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_stuck.py +0 -0
  795. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  796. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_terminal_command.py +0 -0
  797. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_test_author.py +0 -0
  798. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_test_chat.py +0 -0
  799. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_test_orchestrator.py +0 -0
  800. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_test_report.py +0 -0
  801. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_test_verdict_parsing.py +0 -0
  802. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_test_verdict_transcript_floor.py +0 -0
  803. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_text_io_encoding_audit.py +0 -0
  804. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_thin_client_board_audit.py +0 -0
  805. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_thin_client_config_load_1080.py +0 -0
  806. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_thin_client_daemon_routing_906.py +0 -0
  807. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_tmux_host.py +0 -0
  808. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_tmux_session.py +0 -0
  809. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_transcript_floor.py +0 -0
  810. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_usage.py +0 -0
  811. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_usage_limits.py +0 -0
  812. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_usage_rollup.py +0 -0
  813. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_venv_live_install_2121.py +0 -0
  814. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_version_single_source.py +0 -0
  815. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_watch.py +0 -0
  816. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  817. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worker_env_venv_isolation.py +0 -0
  818. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worker_events.py +0 -0
  819. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worker_image_pin_sync.py +0 -0
  820. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worker_safety.py +0 -0
  821. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worker_test_scoping.py +0 -0
  822. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worktree.py +0 -0
  823. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  824. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/test_write_parity.py +0 -0
  825. {code_coordinator-0.5.333 → code_coordinator-0.5.334}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.333
3
+ Version: 0.5.334
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.333
3
+ Version: 0.5.334
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.333",
2
+ "tag": "0.5.334",
3
3
  "distance": 0,
4
- "node": "g05e864bdfa3476802900ee1d85295822957907e0",
4
+ "node": "ga8ed02fdc4995b6f8f25c6915f46e94404a5ef85",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-01"
@@ -521,12 +521,12 @@ async function loadMachines() {
521
521
  const a = m.assignments.active[0];
522
522
  const spec = a.spec || {};
523
523
  detail = `<div class="meta">${badge('busy', 'busy')} #${spec.issue_number}: ${E(spec.issue_title || '')}</div>`;
524
- if (a.progress && a.progress.updates && a.progress.updates.length) {
525
- detail += `<div class="meta">latest: ${E(a.progress.updates[a.progress.updates.length-1])}</div>`;
526
- }
527
- if (a.progress && a.progress.stuck) {
528
- detail += `<div class="meta" style="color:#da3633">STUCK: ${E(a.progress.stuck)}</div>`;
529
- }
524
+ // #3023: GET /api/machines no longer carries `a.progress` (live
525
+ // STATUS:/STUCK: tail of the owning machine's own log file) — that
526
+ // data only ever existed via a fresh per-agent probe, and serving it
527
+ // here would reintroduce the exact per-request fleet fan-out this
528
+ // endpoint was reworked to remove. Use `coord status` / `coord log
529
+ // <id> -f` for live per-worker progress instead.
530
530
  }
531
531
  return `
532
532
  <div class="card">
@@ -51,7 +51,6 @@ from coord.drive_queue import (
51
51
  summarize_drive_queue,
52
52
  )
53
53
  from coord.models import Assignment
54
- from coord.network import check_all, fetch_status
55
54
  from coord.openapi import build_spec, dataclass_schema, openapi_and_docs_routes
56
55
  from coord.pipeline import PipelineView
57
56
  from coord.state import list_drive_queue, load_proposals
@@ -1142,6 +1141,94 @@ def build_app(
1142
1141
  return
1143
1142
  write_board(board)
1144
1143
 
1144
+ def _read_board_and_machine_health() -> tuple: # -> tuple[Board, dict[str, dict]]
1145
+ """The board plus every configured machine's latest daemon-tick-
1146
+ refreshed health row, keyed by machine name (#3023).
1147
+
1148
+ Backs ``GET /api/machines``. Fetches both in ONE daemon round trip
1149
+ when this dashboard is a thin client (``board_service`` configured)
1150
+ instead of two independent ``GET /board`` calls — the review found
1151
+ that ``_read_machine_health()`` fetching its own payload and then
1152
+ ``_active_assignments_by_machine(_read_board())`` fetching a SECOND
1153
+ one doubled this endpoint's daemon I/O per client poll, which is
1154
+ exactly the per-request amplification #3023 exists to eliminate
1155
+ (just at a smaller scale than the fan-out it replaced). A thin
1156
+ client reads the daemon-published payload's
1157
+ ``fleet_health.machine_health`` sibling key — the tick-refreshed
1158
+ output of ``coord.health.fleet_snapshot.FleetHealthRefresher``
1159
+ (#1630) a board poll already carries — never a fresh per-request
1160
+ probe of the fleet. A dashboard co-located with the daemon (no
1161
+ ``board_service``) has no network cost to share in the first place:
1162
+ it reads the board from the local DB and the health rows straight
1163
+ out of the same local DB via ``coord.state.load_machine_health`` +
1164
+ ``coord.health.fleet_snapshot.machine_health_rows`` (the public
1165
+ wrapper ``FleetHealthRefresher.refresh()`` itself calls right after
1166
+ persisting) — so the two modes can't drift.
1167
+
1168
+ A machine absent from the health dict was never polled (fresh
1169
+ install, or nothing has ticked the health refresher yet) — callers
1170
+ must treat that the same as an ``unknown`` state, never as healthy
1171
+ (#1485's failure mode).
1172
+ """
1173
+ from coord import board_service # noqa: PLC0415
1174
+
1175
+ svc = board_service.resolve()
1176
+ if svc is not None:
1177
+ from coord.client import board_from_payload, fetch_board_payload # noqa: PLC0415
1178
+
1179
+ payload = fetch_board_payload(svc)
1180
+ board = board_from_payload(payload)
1181
+ rows = (payload.get("fleet_health") or {}).get("machine_health") or []
1182
+ return board, {row["machine"]: row for row in rows}
1183
+
1184
+ from coord.health.fleet_snapshot import machine_health_rows # noqa: PLC0415
1185
+ from coord.state import load_machine_health # noqa: PLC0415
1186
+
1187
+ board = _read_board()
1188
+ raw = load_machine_health()
1189
+ machine_names = [m.name for m in config.machines]
1190
+ rows = machine_health_rows(machine_names, raw, now=time.time())
1191
+ return board, {row["machine"]: row for row in rows}
1192
+
1193
+ def _active_assignments_by_machine(board) -> dict[str, list[dict]]: # noqa: ANN001
1194
+ """Group *board*'s RUNNING active assignments by machine (#3023).
1195
+
1196
+ Backs the legacy dashboard's per-machine "busy" card
1197
+ (``coord/dashboard/index.html``'s ``loadMachines()``), which used
1198
+ to come from a live per-agent ``GET /status`` probe. The board
1199
+ already carries the same fact — which issue a machine is currently
1200
+ running — from the normal board read path, so grouping it here
1201
+ costs no extra daemon I/O beyond what ``_read_board_and_machine_health()``
1202
+ already fetches.
1203
+
1204
+ Filters to ``status == "running"`` exactly like
1205
+ ``Board.idle_machines()`` and ``Board.active_files_by_repo()`` in
1206
+ ``coord/models.py`` do before treating an active-list entry as real,
1207
+ in-progress work — an unfiltered read of ``board.active`` would be a
1208
+ second, independent answer to "is this machine busy" that could
1209
+ diverge from those two (epic #2096 "one question, one answer").
1210
+ Every ``board.active.append()`` call site happens to set
1211
+ ``status="running"`` at append time today, and reconcile removes
1212
+ non-running entries the same tick it retags them, so this filter is
1213
+ currently a no-op in practice — which is exactly why the existing
1214
+ code defends against it twice already rather than trusting that
1215
+ invariant to hold forever.
1216
+ """
1217
+ out: dict[str, list[dict]] = {}
1218
+ for a in board.active:
1219
+ if a.status != "running":
1220
+ continue
1221
+ out.setdefault(a.machine_name, []).append({
1222
+ "assignment_id": a.assignment_id,
1223
+ "status": a.status,
1224
+ "spec": {
1225
+ "issue_number": a.issue_number,
1226
+ "issue_title": a.issue_title,
1227
+ "repo_name": a.repo_name,
1228
+ },
1229
+ })
1230
+ return out
1231
+
1145
1232
  def _read_drive_queue() -> list[dict]:
1146
1233
  """Every drive-queue row — seeded fixture or the daemon/local DB (#2428).
1147
1234
 
@@ -1350,27 +1437,61 @@ def build_app(
1350
1437
  })
1351
1438
 
1352
1439
  async def api_machines(request: Request) -> JSONResponse:
1440
+ """GET /api/machines — the fleet panel, from daemon-refreshed state (#3023).
1441
+
1442
+ Used to do a synchronous fan-out probe on every request: ``GET
1443
+ /health`` against every configured machine, then ``GET /status``
1444
+ against every one that answered — seconds of worst-case latency,
1445
+ multiplied by every connected client polling this panel live. Now
1446
+ serves the SAME state the board daemon's tick loop already
1447
+ refreshes on its own cadence, plus the board this dashboard reads
1448
+ for every other panel anyway, both from ONE combined read
1449
+ (``_read_board_and_machine_health()``) — zero per-request network
1450
+ fan-out to the fleet, whether this dashboard is co-located with the
1451
+ daemon or a thin client of it.
1452
+
1453
+ Design decision (#3023 review): each active assignment's ``spec``
1454
+ (issue/repo) is included, but the live ``STATUS:``/``STUCK:``
1455
+ per-worker progress tail (``a.progress.updates`` / ``a.progress.stuck``
1456
+ in the pre-#3023 shape) is NOT. That data only ever existed as a
1457
+ fresh tail-read of the OWNING machine's own log file — see
1458
+ ``AgentServer.progress()``/``list_assignments()`` in ``coord/agent.py``
1459
+ ("only this machine can see its own log file — the coordinator
1460
+ cannot stat a remote path") — so serving it here would mean putting
1461
+ the exact per-request fan-out probe this endpoint exists to remove
1462
+ right back in, just hidden one level down. ``coord/dashboard/index.html``
1463
+ no longer reads those two keys; live per-worker progress is still
1464
+ available via ``coord status`` / ``coord log <id> -f``, which DO pay
1465
+ for a targeted probe of the one machine in question rather than
1466
+ every machine on every dashboard poll.
1467
+ """
1353
1468
  if _fixture is not None:
1354
1469
  # Seeded reachability — never probe the fleet in fixture mode.
1355
1470
  return JSONResponse(_fixture.machines())
1356
- statuses = check_all(config.machines, timeout=3.0)
1471
+ board, health_by_name = _read_board_and_machine_health()
1472
+ assignments_by_machine = _active_assignments_by_machine(board)
1357
1473
  result = []
1358
- for s in statuses:
1474
+ for m in config.machines:
1475
+ row = health_by_name.get(m.name) or {}
1359
1476
  machine_data = {
1360
- "name": s.machine.name,
1361
- "host": s.machine.host,
1362
- "repos": s.machine.repos,
1363
- "state": s.state,
1364
- "reason": s.reason,
1365
- "latency_ms": s.latency_ms,
1477
+ "name": m.name,
1478
+ "host": m.host,
1479
+ "repos": m.repos,
1480
+ "state": row.get("state", "unknown"),
1481
+ "reason": row.get("reason", ""),
1482
+ "latency_ms": row.get("latency_ms"),
1483
+ # #3023: agent's own running version — compared against
1484
+ # this coordinator's local version by consumers (coord-tui's
1485
+ # `machine_detail_list` shows it red on a mismatch) — and
1486
+ # total on-disk size of this agent's git worktrees. Both
1487
+ # ride the same tick-refreshed health blob as everything
1488
+ # else here; see `coord.health.fleet_snapshot.refresh`.
1489
+ "agent_version": row.get("agent_runtime_version"),
1490
+ "worktree_bytes": row.get("worktree_bytes"),
1366
1491
  }
1367
- if s.is_online:
1368
- status_result = fetch_status(s.machine, timeout=3.0)
1369
- if status_result.ok:
1370
- machine_data["assignments"] = status_result.data
1371
- else:
1372
- machine_data["assignments"] = None
1373
- machine_data["status_error"] = status_result.error
1492
+ active = assignments_by_machine.get(m.name)
1493
+ if active:
1494
+ machine_data["assignments"] = {"active": active}
1374
1495
  result.append(machine_data)
1375
1496
  return JSONResponse(result)
1376
1497
 
@@ -209,6 +209,19 @@ def _effective_severity(entry: dict, *, now: float) -> tuple[str, bool]:
209
209
  return (severity or "unknown"), stale
210
210
 
211
211
 
212
+ def machine_health_rows(machine_names: list[str], raw: dict, *, now: float) -> list[dict]:
213
+ """Public wrapper around :func:`_machine_health_rows` (#3023).
214
+
215
+ ``coord.dashboard.server`` reads this from outside the module (the
216
+ local-mode half of ``GET /api/machines``, mirroring the thin-client half
217
+ that reads the daemon-published ``fleet_health.machine_health`` block
218
+ ``FleetHealthRefresher.refresh()`` builds from this same function) —
219
+ exposed as a real entry point instead of reaching across the module
220
+ boundary for the underscore-prefixed helper below.
221
+ """
222
+ return _machine_health_rows(machine_names, raw, now=now)
223
+
224
+
212
225
  def _machine_health_rows(machine_names: list[str], raw: dict, *, now: float) -> list[dict]:
213
226
  rows: list[dict] = []
214
227
  for name in machine_names:
@@ -234,6 +247,11 @@ def _machine_health_rows(machine_names: list[str], raw: dict, *, now: float) ->
234
247
  "severity": severity,
235
248
  "checked_at": checks.get("checked_at"),
236
249
  "results": checks.get("results", []),
250
+ # #3023: sibling facts `refresh()` stashes on the same
251
+ # persisted `health` blob — see its docstring comment for
252
+ # why they live here instead of inside `results`.
253
+ "worktree_bytes": checks.get("worktree_bytes"),
254
+ "agent_runtime_version": checks.get("agent_runtime_version"),
237
255
  }
238
256
  )
239
257
  return rows
@@ -310,6 +328,36 @@ class FleetHealthRefresher:
310
328
  health_block = (
311
329
  status.health.get("health") if status.health else None
312
330
  ) or last_known_health
331
+ # #3023: the coord-web Machines panel (GET /api/machines) needs
332
+ # two more whole-payload facts that live OUTSIDE the H-1
333
+ # check-registry block above — the agent's own running
334
+ # `version` (compared against the coordinator's local version to
335
+ # flag skew) and `worktree_bytes` (total on-disk size of this
336
+ # agent's git worktrees). Both are real facts about the agent
337
+ # PROCESS, not a health check result, so they ride as sibling
338
+ # keys on the same persisted `health` blob rather than a schema
339
+ # change — advisory only, same as everything else in this
340
+ # module (see the module docstring). Freshly measured whenever
341
+ # this poll actually reached the agent; carried forward from the
342
+ # last successful poll otherwise, same "last-known, not
343
+ # blanked" posture as the H-1 `results` above, so a machine
344
+ # that's merely offline for one tick doesn't flash to "no data"
345
+ # in the panel. Named `agent_runtime_version` (not
346
+ # `agent_version`) to avoid colliding with the unrelated
347
+ # `agent_version` H-1 *check* already inside `results`, which
348
+ # measures installed-vs-latest-on-PyPI skew, not this.
349
+ if status.health is not None:
350
+ worktree_bytes = status.health.get("worktree_bytes")
351
+ agent_runtime_version = status.health.get("version")
352
+ else:
353
+ worktree_bytes = (last_known_health or {}).get("worktree_bytes")
354
+ agent_runtime_version = (last_known_health or {}).get("agent_runtime_version")
355
+ if health_block is not None:
356
+ health_block = {
357
+ **health_block,
358
+ "worktree_bytes": worktree_bytes,
359
+ "agent_runtime_version": agent_runtime_version,
360
+ }
313
361
  state.save_machine_health(
314
362
  machine.name,
315
363
  state=status.state,
@@ -125,23 +125,30 @@ class TestBoardAPI:
125
125
 
126
126
 
127
127
  class TestMachinesAPI:
128
- @patch("coord.dashboard.server.fetch_status")
129
- @patch("coord.dashboard.server.check_all")
130
- def test_returns_machine_list(
131
- self, mock_check: MagicMock, mock_fetch: MagicMock,
132
- ) -> None:
133
- mock_status = MagicMock()
134
- mock_status.machine = Machine(name="laptop", host="laptop.tailnet", repos=["api"])
135
- mock_status.state = "online"
136
- mock_status.reason = ""
137
- mock_status.latency_ms = 5.0
138
- mock_status.is_online = True
139
- mock_check.return_value = [mock_status]
140
- from coord.network import StatusResult
141
- mock_fetch.return_value = StatusResult(data={"active": [], "completed": []})
142
-
143
- client = _client()
144
- r = client.get("/api/machines")
128
+ """#3023: served from the daemon's already-refreshed health snapshot,
129
+ never a per-request fan-out probe of the fleet — see
130
+ ``tests/test_dashboard_api.py::TestMachinesAPI`` for the fuller
131
+ shape/no-probe/legacy-consumer coverage this issue asks for. This class
132
+ keeps the smoke-level "does the route wire up" check colocated with the
133
+ rest of this file's board/sessions API tests.
134
+ """
135
+
136
+ def test_returns_machine_list(self) -> None:
137
+ health = {
138
+ "laptop": {
139
+ "state": "online",
140
+ "reason": "",
141
+ "latency_ms": 5.0,
142
+ "received_at": time.time(),
143
+ "health": {"schema": 1, "checked_at": time.time(), "results": []},
144
+ },
145
+ }
146
+ client = _client()
147
+ with (
148
+ patch("coord.state.load_machine_health", return_value=health),
149
+ patch("coord.dashboard.server.read_board", return_value=Board()),
150
+ ):
151
+ r = client.get("/api/machines")
145
152
  assert r.status_code == 200
146
153
  data = r.json()
147
154
  assert len(data) == 1
@@ -10,14 +10,16 @@ worker thread, which the autouse ``coord_db`` in-memory connection
10
10
  from __future__ import annotations
11
11
 
12
12
  import sqlite3
13
+ import time
13
14
  from pathlib import Path
15
+ from unittest.mock import patch
14
16
 
15
17
  import pytest
16
18
  from starlette.testclient import TestClient
17
19
 
18
20
  from coord.config import Config
19
21
  from coord.dashboard.server import build_app
20
- from coord.models import Machine, Repo
22
+ from coord.models import Assignment, Board, Machine, Repo
21
23
 
22
24
 
23
25
  @pytest.fixture(autouse=True)
@@ -499,3 +501,271 @@ class TestPortalThinClientRouting:
499
501
  )
500
502
 
501
503
  assert r.status_code == 404
504
+
505
+
506
+ class TestMachinesAPI:
507
+ """#3023: GET /api/machines serves the daemon's already-refreshed
508
+ machine state — never a synchronous per-request fan-out probe of the
509
+ fleet (the old shape: ``check_all`` against every machine's
510
+ ``/health``, then ``fetch_status`` against every one that answered).
511
+ """
512
+
513
+ def _health_row(self, **overrides) -> dict:
514
+ now = time.time()
515
+ row = {
516
+ "state": "online",
517
+ "reason": "",
518
+ "latency_ms": 7.5,
519
+ "received_at": now,
520
+ "health": {
521
+ "schema": 1,
522
+ "checked_at": now,
523
+ "results": [],
524
+ "worktree_bytes": 4096,
525
+ "agent_runtime_version": "0.42.0",
526
+ },
527
+ }
528
+ row.update(overrides)
529
+ return row
530
+
531
+ def test_served_shape_carries_daemon_refreshed_fields(self) -> None:
532
+ """reachability, state/reason, latency, agent version, worktree
533
+ bytes — all sourced from the tick-refreshed health snapshot, not a
534
+ live probe of the agent."""
535
+ client = _client()
536
+ with (
537
+ patch(
538
+ "coord.state.load_machine_health",
539
+ return_value={"laptop": self._health_row()},
540
+ ),
541
+ patch("coord.dashboard.server.read_board", return_value=Board()),
542
+ ):
543
+ r = client.get("/api/machines")
544
+
545
+ assert r.status_code == 200
546
+ data = r.json()
547
+ assert len(data) == 1
548
+ m = data[0]
549
+ assert m["name"] == "laptop"
550
+ assert m["host"] == "laptop.tailnet"
551
+ assert m["repos"] == ["api"]
552
+ assert m["state"] == "online"
553
+ assert m["reason"] == ""
554
+ assert m["latency_ms"] == 7.5
555
+ assert m["agent_version"] == "0.42.0"
556
+ assert m["worktree_bytes"] == 4096
557
+
558
+ def test_never_polled_machine_reads_unknown_not_absent(self) -> None:
559
+ client = _client()
560
+ with (
561
+ patch("coord.state.load_machine_health", return_value={}),
562
+ patch("coord.dashboard.server.read_board", return_value=Board()),
563
+ ):
564
+ r = client.get("/api/machines")
565
+
566
+ assert r.status_code == 200
567
+ data = r.json()
568
+ assert data[0]["state"] == "unknown"
569
+
570
+ def test_performs_no_per_request_fleet_probe(self) -> None:
571
+ """The whole point of #3023: assert on the ABSENCE of the fan-out
572
+ probe call, not on wall-clock timing (a slow mock could satisfy a
573
+ timing assertion while still being the wrong architecture).
574
+ """
575
+ client = _client()
576
+ with (
577
+ patch("coord.network.check_all") as mock_check_all,
578
+ patch("coord.network.check_machine") as mock_check_machine,
579
+ patch("coord.network.fetch_status") as mock_fetch_status,
580
+ patch("coord.state.load_machine_health", return_value={}),
581
+ patch("coord.dashboard.server.read_board", return_value=Board()),
582
+ ):
583
+ r = client.get("/api/machines")
584
+
585
+ assert r.status_code == 200
586
+ mock_check_all.assert_not_called()
587
+ mock_check_machine.assert_not_called()
588
+ mock_fetch_status.assert_not_called()
589
+
590
+ def test_busy_machine_carries_its_active_assignment_from_the_board(self) -> None:
591
+ """The legacy dashboard's per-machine 'busy' card used to come from
592
+ a live per-agent GET /status probe; it now comes from the same
593
+ board this dashboard already reads for every other panel."""
594
+ board = Board(active=[
595
+ Assignment(
596
+ machine_name="laptop", repo_name="api",
597
+ issue_number=42, issue_title="Fix auth",
598
+ assignment_id="abc123", status="running",
599
+ ),
600
+ ])
601
+ client = _client()
602
+ with (
603
+ patch("coord.state.load_machine_health", return_value={}),
604
+ patch("coord.dashboard.server.read_board", return_value=board),
605
+ ):
606
+ r = client.get("/api/machines")
607
+
608
+ assert r.status_code == 200
609
+ active = r.json()[0]["assignments"]["active"]
610
+ assert len(active) == 1
611
+ assert active[0]["spec"]["issue_number"] == 42
612
+ assert active[0]["spec"]["issue_title"] == "Fix auth"
613
+
614
+ def test_idle_machine_carries_no_assignments_key(self) -> None:
615
+ client = _client()
616
+ with (
617
+ patch("coord.state.load_machine_health", return_value={}),
618
+ patch("coord.dashboard.server.read_board", return_value=Board()),
619
+ ):
620
+ r = client.get("/api/machines")
621
+
622
+ assert "assignments" not in r.json()[0]
623
+
624
+ def test_non_running_assignment_excluded_from_busy_card(self) -> None:
625
+ """``_active_assignments_by_machine`` must filter to ``status ==
626
+ "running"`` exactly like ``Board.idle_machines()`` and
627
+ ``Board.active_files_by_repo()`` do — an unfiltered read of
628
+ ``board.active`` would be a second, independent answer to "is this
629
+ machine busy" that could diverge from those two (#2096 "one
630
+ question, one answer")."""
631
+ board = Board(active=[
632
+ Assignment(
633
+ machine_name="laptop", repo_name="api",
634
+ issue_number=99, issue_title="Not actually running",
635
+ assignment_id="pending1", status="pending",
636
+ ),
637
+ ])
638
+ client = _client()
639
+ with (
640
+ patch("coord.state.load_machine_health", return_value={}),
641
+ patch("coord.dashboard.server.read_board", return_value=board),
642
+ ):
643
+ r = client.get("/api/machines")
644
+
645
+ assert "assignments" not in r.json()[0]
646
+
647
+ def test_thin_client_reads_the_daemons_published_fleet_health_block(
648
+ self, monkeypatch
649
+ ) -> None:
650
+ """``board_service`` configured -> the raw ``/board`` payload's
651
+ ``fleet_health.machine_health`` sibling key, not a local DB read and
652
+ not a fresh probe of the fleet.
653
+
654
+ Also asserts the payload is fetched exactly ONCE (#3023 review): the
655
+ health rows and the board's active assignments both come from the
656
+ same ``/board`` response, not two independent daemon round trips."""
657
+ import coord.client as cc
658
+
659
+ monkeypatch.setattr(
660
+ cc, "resolve_board_service",
661
+ lambda *a, **k: cc.ServiceConfig("http://daemon:7435"),
662
+ )
663
+
664
+ now = time.time()
665
+ payload = {
666
+ "assignments": [],
667
+ "plans": {},
668
+ "round_number": 0,
669
+ "fleet_health": {
670
+ "schema": 1,
671
+ "refreshed_at": now,
672
+ "truncated": False,
673
+ "machine_health": [
674
+ {
675
+ "machine": "laptop",
676
+ "state": "online",
677
+ "reason": "",
678
+ "latency_ms": 3.2,
679
+ "received_at": now,
680
+ "stale": False,
681
+ "severity": "ok",
682
+ "checked_at": now,
683
+ "results": [],
684
+ "worktree_bytes": 999,
685
+ "agent_runtime_version": "1.0.0",
686
+ },
687
+ ],
688
+ "fleet_checks": [],
689
+ },
690
+ }
691
+
692
+ calls = []
693
+
694
+ def fake_get(url, **kw):
695
+ calls.append(url)
696
+
697
+ class _Resp:
698
+ status_code = 200
699
+
700
+ def raise_for_status(self):
701
+ return None
702
+
703
+ def json(self):
704
+ return payload
705
+
706
+ return _Resp()
707
+
708
+ monkeypatch.setattr(cc.httpx, "get", fake_get)
709
+
710
+ with patch("coord.network.check_all") as mock_check_all:
711
+ client = _client()
712
+ r = client.get("/api/machines")
713
+
714
+ assert len(calls) == 1, (
715
+ f"expected exactly one /board round trip, got {len(calls)}: {calls}"
716
+ )
717
+
718
+ assert r.status_code == 200
719
+ mock_check_all.assert_not_called()
720
+ data = r.json()
721
+ assert data[0]["worktree_bytes"] == 999
722
+ assert data[0]["agent_version"] == "1.0.0"
723
+
724
+ def test_legacy_dashboard_still_consumes_the_response(self) -> None:
725
+ """Compatibility check (this issue's explicit ask):
726
+ ``coord/dashboard/index.html``'s ``loadMachines()`` reads
727
+ ``m.state``, ``m.latency_ms``, ``m.name``, ``m.host``, ``m.repos``,
728
+ and ``m.assignments.active[0].spec.{issue_number,issue_title}`` —
729
+ every key it dereferences must still be present in the served
730
+ shape.
731
+
732
+ Also asserts the (documented, #3023 review) DROPPED half of the old
733
+ shape: ``a.progress`` (the live per-worker ``STATUS:``/``STUCK:``
734
+ log tail) is gone from BOTH sides — the server no longer serves it,
735
+ and ``index.html`` no longer dereferences it — so this isn't a
736
+ silent, undiscovered loss the way the reviewer flagged the first
737
+ version of this PR for.
738
+ """
739
+ board = Board(active=[
740
+ Assignment(
741
+ machine_name="laptop", repo_name="api",
742
+ issue_number=7, issue_title="Add logging",
743
+ assignment_id="def456", status="running",
744
+ ),
745
+ ])
746
+ client = _client()
747
+
748
+ index_html = client.get("/").text
749
+ assert "loadMachines" in index_html
750
+ assert "m.assignments.active" in index_html
751
+ assert "m.repos" in index_html
752
+ # Dead branches removed, not just left dangling — a comment
753
+ # referencing `a.progress` for context is fine, a live
754
+ # `a.progress.updates`/`a.progress.stuck` dereference is not.
755
+ assert "a.progress." not in index_html
756
+
757
+ with (
758
+ patch(
759
+ "coord.state.load_machine_health",
760
+ return_value={"laptop": self._health_row()},
761
+ ),
762
+ patch("coord.dashboard.server.read_board", return_value=board),
763
+ ):
764
+ r = client.get("/api/machines")
765
+
766
+ m = r.json()[0]
767
+ for key in ("name", "host", "repos", "state", "latency_ms"):
768
+ assert key in m
769
+ assert m["assignments"]["active"][0]["spec"]["issue_number"] == 7
770
+ assert m["assignments"]["active"][0]["spec"]["issue_title"] == "Add logging"
771
+ assert "progress" not in m["assignments"]["active"][0]
@@ -68,8 +68,12 @@ def _no_io(monkeypatch: pytest.MonkeyPatch) -> None:
68
68
  monkeypatch.setattr("coord.dashboard.server.write_board", _boom)
69
69
  monkeypatch.setattr("coord.dashboard.server.load_proposals", _boom)
70
70
  monkeypatch.setattr("coord.dashboard.server.list_drive_queue", _boom)
71
- monkeypatch.setattr("coord.dashboard.server.check_all", _boom)
72
- monkeypatch.setattr("coord.dashboard.server.fetch_status", _boom)
71
+ # #3023: GET /api/machines no longer fans out to the fleet at all (live
72
+ # mode now reads the daemon's already-refreshed health snapshot instead
73
+ # of probing `check_all`/`fetch_status`) — these two boundaries assert
74
+ # fixture mode never falls through to THAT read path either.
75
+ monkeypatch.setattr("coord.state.load_machine_health", _boom)
76
+ monkeypatch.setattr("coord.client.fetch_board_payload", _boom)
73
77
  monkeypatch.setattr("coord.merge_queue.load_queue", _boom)
74
78
  monkeypatch.setattr("coord.state.load_assignment_review_findings", _boom)
75
79
  monkeypatch.setattr("coord.github_ops._gh", _boom)