code-coordinator 0.5.333__tar.gz → 0.5.335__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 (826) hide show
  1. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/client.py +36 -0
  5. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dashboard/index.html +6 -6
  6. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dashboard/server.py +284 -16
  7. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/fleet_snapshot.py +48 -0
  8. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dashboard.py +24 -17
  9. code_coordinator-0.5.335/tests/test_dashboard_api.py +960 -0
  10. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dashboard_fixture.py +6 -2
  11. code_coordinator-0.5.333/tests/test_dashboard_api.py +0 -501
  12. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/.gitignore +0 -0
  25. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/GOAL.md +0 -0
  27. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/LICENSE +0 -0
  28. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/README.md +0 -0
  30. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/chat.py +0 -0
  69. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/dispatch.py +0 -0
  70. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/dispatch_workers.py +0 -0
  71. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/drive.py +0 -0
  72. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/drive_queue.py +0 -0
  73. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/gate_a.py +0 -0
  74. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/gates.py +0 -0
  75. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/issues.py +0 -0
  76. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/lifecycle.py +0 -0
  77. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/machine.py +0 -0
  78. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/pr.py +0 -0
  84. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/store_migrate.py +0 -0
  93. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/terminal.py +0 -0
  94. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/test_gate.py +0 -0
  95. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/commands/tui.py +0 -0
  96. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/comments.py +0 -0
  97. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/config.py +0 -0
  98. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/config_reload.py +0 -0
  99. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/confirm_test.py +0 -0
  100. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/conflict_fix.py +0 -0
  101. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dao.py +0 -0
  102. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dashboard/__init__.py +0 -0
  103. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dashboard/fixture.py +0 -0
  104. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dashboard/terminal.py +0 -0
  105. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/db.py +0 -0
  106. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dead_end.py +0 -0
  107. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/decomposition_chat.py +0 -0
  108. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/README.md +0 -0
  109. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-agent.service +0 -0
  110. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-db-backup.service +0 -0
  111. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-db-backup.sh +0 -0
  112. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-db-backup.timer +0 -0
  113. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-drive-queue.service +0 -0
  114. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-drive-queue.timer +0 -0
  115. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-failure-notify.service +0 -0
  116. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-fleet-watchdog.service +0 -0
  117. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  118. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-notify.service +0 -0
  119. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-notify.timer +0 -0
  120. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-release-propagate.service +0 -0
  121. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-release-propagate.timer +0 -0
  122. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-release-window.service +0 -0
  123. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-release-window.timer +0 -0
  124. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-serve.service +0 -0
  125. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-web-dist-build.service +0 -0
  126. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-web-dist-build.timer +0 -0
  127. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy/coord-web.service +0 -0
  128. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy_manifest.py +0 -0
  129. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deploy_units.py +0 -0
  130. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deprecation_telemetry.py +0 -0
  131. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/deps.py +0 -0
  132. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/diagnose.py +0 -0
  133. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dispatch.py +0 -0
  134. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/dist_name.py +0 -0
  135. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/drive.py +0 -0
  136. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/drive_queue.py +0 -0
  137. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/drive_state.py +0 -0
  138. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/events.py +0 -0
  139. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/failure_class.py +0 -0
  140. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/filelock.py +0 -0
  141. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/fleet_config_health.py +0 -0
  142. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/forge_availability.py +0 -0
  143. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/freshness.py +0 -0
  144. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/gate_a.py +0 -0
  145. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/gate_b.py +0 -0
  146. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/gate_snapshot.py +0 -0
  147. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/gates.py +0 -0
  148. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/github_ops.py +0 -0
  149. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/github_throttle.py +0 -0
  150. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/goal.py +0 -0
  151. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/graph_health.py +0 -0
  152. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/__init__.py +0 -0
  153. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/aggregate.py +0 -0
  154. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/__init__.py +0 -0
  155. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/_ci_pin.py +0 -0
  156. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/agent_install.py +0 -0
  157. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/cargo_targets.py +0 -0
  158. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/claude_binary.py +0 -0
  159. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  160. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/coord_web_ci_pin.py +0 -0
  161. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/deploy_lane_facts.py +0 -0
  162. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/disk.py +0 -0
  163. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/fleet_board.py +0 -0
  164. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  165. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/fleet_phantom.py +0 -0
  166. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/fleet_unit_drift.py +0 -0
  167. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/graph.py +0 -0
  168. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/graphify_cli.py +0 -0
  169. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/index_lock.py +0 -0
  170. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/issues_sync_staleness.py +0 -0
  171. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/plan_usage.py +0 -0
  172. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/release_cordon.py +0 -0
  173. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/repo_state.py +0 -0
  174. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/spawned_coord.py +0 -0
  175. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/stalled_pipeline.py +0 -0
  176. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/timer_active.py +0 -0
  177. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/toolchain.py +0 -0
  178. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/unit_drift.py +0 -0
  179. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/unit_enablement.py +0 -0
  180. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/wedged_drive_queue.py +0 -0
  181. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/checks/worktrees.py +0 -0
  182. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/cli.py +0 -0
  183. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/context.py +0 -0
  184. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/models.py +0 -0
  185. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/pypi.py +0 -0
  186. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/registry.py +0 -0
  187. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/render.py +0 -0
  188. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/health/units.py +0 -0
  189. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/hooks.py +0 -0
  190. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/housekeeping.py +0 -0
  191. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/interactive.py +0 -0
  192. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/issue_store.py +0 -0
  193. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/issues_sync_status.py +0 -0
  194. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/liveness_auditor.py +0 -0
  195. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/machine_metrics.py +0 -0
  196. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/machine_onboard.py +0 -0
  197. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/machine_pause.py +0 -0
  198. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/merge_queue.py +0 -0
  199. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/milestone_chat.py +0 -0
  200. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/milestone_dispatch.py +0 -0
  201. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/milestone_gate.py +0 -0
  202. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/milestone_order.py +0 -0
  203. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/mock_author.py +0 -0
  204. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/models.py +0 -0
  205. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/network.py +0 -0
  206. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/new_issue_chat.py +0 -0
  207. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/__init__.py +0 -0
  208. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/baseline.py +0 -0
  209. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/cli.py +0 -0
  210. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/collect.py +0 -0
  211. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/digest.py +0 -0
  212. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/models.py +0 -0
  213. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/predicate.py +0 -0
  214. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/service.py +0 -0
  215. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/store.py +0 -0
  216. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notifier/transport.py +0 -0
  217. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/notify.py +0 -0
  218. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/openapi.py +0 -0
  219. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/overlap_fence.py +0 -0
  220. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/overlap_predict.py +0 -0
  221. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/parentage.py +0 -0
  222. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/parentage_github.py +0 -0
  223. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/pipeline.py +0 -0
  224. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/plan_parser.py +0 -0
  225. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/plans.py +0 -0
  226. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/platform_paths.py +0 -0
  227. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/portal_bridge.py +0 -0
  228. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/portal_store.py +0 -0
  229. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/portal_sync.py +0 -0
  230. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/pr_body_lint.py +0 -0
  231. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/prereqs.py +0 -0
  232. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/progress.py +0 -0
  233. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/providers/__init__.py +0 -0
  234. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/providers/base.py +0 -0
  235. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/providers/claude.py +0 -0
  236. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/providers/claude_pty.py +0 -0
  237. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/providers/opencode.py +0 -0
  238. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/queue_diagnose.py +0 -0
  239. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/reconcile.py +0 -0
  240. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/reconcile_tick.py +0 -0
  241. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/refine_chat.py +0 -0
  242. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/release_cordon.py +0 -0
  243. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/release_propagate.py +0 -0
  244. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/release_verify.py +0 -0
  245. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/release_window.py +0 -0
  246. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/repo_dormancy.py +0 -0
  247. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/repo_edit.py +0 -0
  248. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/repo_onboard.py +0 -0
  249. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/reports.py +0 -0
  250. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/rest_schema.py +0 -0
  251. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/revalidate.py +0 -0
  252. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/review.py +0 -0
  253. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/scorecard.py +0 -0
  254. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/self_health.py +0 -0
  255. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/serve_app.py +0 -0
  256. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  257. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  258. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  259. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  260. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  261. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/portal-followup/SKILL.md +0 -0
  262. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/release-now/SKILL.md +0 -0
  263. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  264. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  265. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/skills/update-issue/SKILL.md +0 -0
  266. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/smoke.py +0 -0
  267. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/spend_ceiling.py +0 -0
  268. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/split_work.py +0 -0
  269. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/sql.py +0 -0
  270. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/stage_projection.py +0 -0
  271. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/state.py +0 -0
  272. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/store_migrate.py +0 -0
  273. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/test_author.py +0 -0
  274. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/test_chat.py +0 -0
  275. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/test_orchestrator.py +0 -0
  276. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/test_report.py +0 -0
  277. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/tui_release.py +0 -0
  278. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/usage.py +0 -0
  279. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/usage_limits.py +0 -0
  280. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/usage_rollup.py +0 -0
  281. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coord/worker_events.py +0 -0
  282. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/coordinator.example.yml +0 -0
  283. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-agent.service +0 -0
  284. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-db-backup.service +0 -0
  285. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-db-backup.sh +0 -0
  286. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-db-backup.timer +0 -0
  287. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-drive-queue.service +0 -0
  288. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-drive-queue.timer +0 -0
  289. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-failure-notify.service +0 -0
  290. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-failure-notify.sh +0 -0
  291. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-fleet-watchdog.service +0 -0
  292. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-fleet-watchdog.timer +0 -0
  293. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-notify.service +0 -0
  294. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-notify.timer +0 -0
  295. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-release-propagate.service +0 -0
  296. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-release-propagate.timer +0 -0
  297. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-release-window.service +0 -0
  298. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-release-window.timer +0 -0
  299. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-serve.service +0 -0
  300. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-web-dist-build.service +0 -0
  301. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-web-dist-build.sh +0 -0
  302. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-web-dist-build.timer +0 -0
  303. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-web-rollback.sh +0 -0
  304. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/coord-web.service +0 -0
  305. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/deploy/node-shim.sh +0 -0
  306. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ADR_COORD_TUI_CI.md +0 -0
  307. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  308. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ADR_COORD_WEB_CI.md +0 -0
  309. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ADR_COORD_WEB_DIST.md +0 -0
  310. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  311. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/AGENT_OPERATIONS.md +0 -0
  312. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ARCHITECTURE.md +0 -0
  313. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ARCH_SECURITY_GATES.md +0 -0
  314. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/COCKPIT.md +0 -0
  315. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/CONTROL_CENTER.md +0 -0
  316. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/COST_DISCIPLINE.md +0 -0
  317. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/CROSS_PLATFORM.md +0 -0
  318. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/CUSTOMER_FACING_APPS.md +0 -0
  319. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/CUSTOMER_PORTAL.md +0 -0
  320. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/DRIVE_QUEUE.md +0 -0
  321. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/EPHEMERAL_WORKERS.md +0 -0
  322. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/FORGE_MIGRATION.md +0 -0
  323. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/GRAPHIFY_SETUP.md +0 -0
  324. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ISSUE_GUIDANCE.md +0 -0
  325. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/MAC_MINI.md +0 -0
  326. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  327. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/NOTIFIER.md +0 -0
  328. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/OPENCODE_VERIFICATION.md +0 -0
  329. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/OPERATING_GOTCHAS.md +0 -0
  330. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/OPERATOR_GUIDES.md +0 -0
  331. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/ORACLE_LOOP.md +0 -0
  332. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/PHONE_WEBAPP.md +0 -0
  333. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/PIPELINE_V2.md +0 -0
  334. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/PLATFORM_EVOLUTION.md +0 -0
  335. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/SECOND_BACKEND.md +0 -0
  336. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/STORE_SERVICE.md +0 -0
  337. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  338. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/WEB_CONTROL_CENTER.md +0 -0
  339. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/WSL_WINDOWS_WORKER.md +0 -0
  340. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/mocks/web/README.md +0 -0
  341. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/mocks/web/_tokens.css +0 -0
  342. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/mocks/web/issue-detail.html +0 -0
  343. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/mocks/web/pipeline-narrow.html +0 -0
  344. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/docs/mocks/web/pipeline-wide.html +0 -0
  345. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/graphify-out/.gitignore +0 -0
  346. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/install-agent.sh +0 -0
  347. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/pyproject.toml +0 -0
  348. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/audit_review_verdict_overrides.py +0 -0
  349. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  350. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/build-worker-image.sh +0 -0
  351. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/coordinator-machine.py +0 -0
  352. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/epic-down.sh +0 -0
  353. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/epic-up.sh +0 -0
  354. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/preflight.sh +0 -0
  355. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/provision-worker.sh +0 -0
  356. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  357. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  358. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/azure-workers/verify-github-token.sh +0 -0
  359. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/check_gh_argv_containment.py +0 -0
  360. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/codegen.py +0 -0
  361. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/coord-test-runner.sh +0 -0
  362. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  363. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  364. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  365. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  366. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/coord-venv-rollback.sh +0 -0
  367. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/drive-batch.sh +0 -0
  368. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/extract-coord-tui.sh +0 -0
  369. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/fleet_watchdog.py +0 -0
  370. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/gen_board_fixture.py +0 -0
  371. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/gen_mock_index.py +0 -0
  372. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/next_release_tag.py +0 -0
  373. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/run_tests_in_populated_home.sh +0 -0
  374. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/run_tests_without_gh.sh +0 -0
  375. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/smoke_437_interactive.py +0 -0
  376. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/verify_878_review_capture.py +0 -0
  377. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/verify_release_published.py +0 -0
  378. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/scripts/verify_release_wheel.py +0 -0
  379. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/setup.cfg +0 -0
  380. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/SMOKE_SET.md +0 -0
  381. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/__init__.py +0 -0
  382. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-37/conftest.py +0 -0
  383. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-37/contract.md +0 -0
  384. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-37/manifest.yml +0 -0
  385. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  386. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  387. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-51/contract.md +0 -0
  388. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  389. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  390. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-51/manifest.yml +0 -0
  391. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  392. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-51/tsconfig.json +0 -0
  393. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  394. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/backends.py +0 -0
  395. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/conftest.py +0 -0
  396. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/board-pipeline-basic.json +0 -0
  397. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  398. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  399. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  400. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  401. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/all_pass.json +0 -0
  402. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  403. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/mixed_fail.json +0 -0
  404. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  405. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  406. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/skip.json +0 -0
  407. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/playwright/truncated.json +0 -0
  408. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  409. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  410. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  411. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  412. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  413. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  414. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  415. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  416. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_acceptance.py +0 -0
  417. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_acceptance_drivers.py +0 -0
  418. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent.py +0 -0
  419. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_api_error.py +0 -0
  420. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_app.py +0 -0
  421. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_branch_base.py +0 -0
  422. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_branch_capture.py +0 -0
  423. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_config_free_1712.py +0 -0
  424. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_deploy_units_endpoint.py +0 -0
  425. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_dirty_worktree.py +0 -0
  426. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  427. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_graph_self_heal.py +0 -0
  428. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_health_h3.py +0 -0
  429. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_idle_restart.py +0 -0
  430. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_push_failure.py +0 -0
  431. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_reap.py +0 -0
  432. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_repos_and_pull.py +0 -0
  433. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_restart_services_endpoint.py +0 -0
  434. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_skills_self_heal.py +0 -0
  435. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_startup_diagnostics.py +0 -0
  436. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_update.py +0 -0
  437. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_update_bluegreen.py +0 -0
  438. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_usage_limit.py +0 -0
  439. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_agent_zero_commit.py +0 -0
  440. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_ambient_home_isolation.py +0 -0
  441. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_approve_dependency_busy_2804.py +0 -0
  442. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_approve_reject_plan.py +0 -0
  443. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_approve_usage_gate.py +0 -0
  444. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_approved_work_2532.py +0 -0
  445. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_approved_work_2996.py +0 -0
  446. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_assignment_already_recorded_daemon.py +0 -0
  447. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_audit_log.py +0 -0
  448. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_audit_outcome.py +0 -0
  449. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_audit_query.py +0 -0
  450. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_auto_loop.py +0 -0
  451. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_auto_release_publish_2035.py +0 -0
  452. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_backend_selection.py +0 -0
  453. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_base_checkout_restore.py +0 -0
  454. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_block_log.py +0 -0
  455. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_cap_762.py +0 -0
  456. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_fixture.py +0 -0
  457. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_read_path.py +0 -0
  458. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_schema.py +0 -0
  459. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_service.py +0 -0
  460. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_state.py +0 -0
  461. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_board_wire.py +0 -0
  462. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_brain.py +0 -0
  463. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_branch_model.py +0 -0
  464. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_bug_intake.py +0 -0
  465. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_build_worker_image_env_update.py +0 -0
  466. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cargo_cache.py +0 -0
  467. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_check_gh_argv_containment.py +0 -0
  468. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_ci_acceptance_gate_1950.py +0 -0
  469. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_ci_fix.py +0 -0
  470. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_ci_gitlab.py +0 -0
  471. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_ci_parity_2091.py +0 -0
  472. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_ci_store.py +0 -0
  473. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_claim.py +0 -0
  474. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_claude_md_budget.py +0 -0
  475. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_acceptance.py +0 -0
  476. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_assign.py +0 -0
  477. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  478. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_assign_interactive_remote.py +0 -0
  479. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_assign_provider.py +0 -0
  480. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  481. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_audit.py +0 -0
  482. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_chat_continue.py +0 -0
  483. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_decide.py +0 -0
  484. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_diagnose_capability_rules.py +0 -0
  485. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_diagnose_config_provenance.py +0 -0
  486. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_diagnose_forge_availability.py +0 -0
  487. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_diagnose_graph.py +0 -0
  488. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_diagnose_self.py +0 -0
  489. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_diagnose_test_coverage.py +0 -0
  490. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_doctor.py +0 -0
  491. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_doctor_config_free_1801.py +0 -0
  492. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  493. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_drive.py +0 -0
  494. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_drive_queue.py +0 -0
  495. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_escalate.py +0 -0
  496. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_fix_headless_review.py +0 -0
  497. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_gate_a.py +0 -0
  498. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_install_drift.py +0 -0
  499. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_install_skills.py +0 -0
  500. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_issue_comment.py +0 -0
  501. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_issue_create_label.py +0 -0
  502. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_issue_reopen.py +0 -0
  503. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_issue_view_list.py +0 -0
  504. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_merge.py +0 -0
  505. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_assign.py +0 -0
  506. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_capture.py +0 -0
  507. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_chat_add_child.py +0 -0
  508. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_dispatch.py +0 -0
  509. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_gate_b.py +0 -0
  510. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_gate_c.py +0 -0
  511. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_order.py +0 -0
  512. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  513. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_milestone_ship.py +0 -0
  514. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_network.py +0 -0
  515. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_new_issue_chat.py +0 -0
  516. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_plans.py +0 -0
  517. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_portal.py +0 -0
  518. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_pr.py +0 -0
  519. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_pull_artifact.py +0 -0
  520. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_queue.py +0 -0
  521. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_reattach_sessions.py +0 -0
  522. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_refine_board.py +0 -0
  523. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_release_preflight.py +0 -0
  524. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_release_propagate.py +0 -0
  525. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_release_window.py +0 -0
  526. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_repo_2220.py +0 -0
  527. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  528. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_scorecard.py +0 -0
  529. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_set_review_findings.py +0 -0
  530. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_advisory_terminal.py +0 -0
  531. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_contested_tag.py +0 -0
  532. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_merge_queue.py +0 -0
  533. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_provider.py +0 -0
  534. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_review_finalizing.py +0 -0
  535. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_test_failed_tag.py +0 -0
  536. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_status_usage_limit.py +0 -0
  537. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_sync_comments_873.py +0 -0
  538. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_test_plan.py +0 -0
  539. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_track.py +0 -0
  540. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_tui_update.py +0 -0
  541. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cli_wait.py +0 -0
  542. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_client_base_install.py +0 -0
  543. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_client_resource_migration_1946.py +0 -0
  544. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_commands_common.py +0 -0
  545. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_comments.py +0 -0
  546. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_completion_summary.py +0 -0
  547. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_config.py +0 -0
  548. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_config_acceptance.py +0 -0
  549. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_config_audit.py +0 -0
  550. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_config_pricing.py +0 -0
  551. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  552. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_config_usage_gate.py +0 -0
  553. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_confirm_test.py +0 -0
  554. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_conflict_fix.py +0 -0
  555. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_conflict_fix_semantic.py +0 -0
  556. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  557. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_test.py +0 -0
  558. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  559. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_test_runner_baseline.py +0 -0
  560. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_test_runner_populated_home.py +0 -0
  561. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_test_runner_routing.py +0 -0
  562. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_test_runner_toolchain.py +0 -0
  563. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_uat.py +0 -0
  564. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coord_web_sse_restart_live.py +0 -0
  565. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_coordinator_machine.py +0 -0
  566. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_cross_platform_imports.py +0 -0
  567. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dao.py +0 -0
  568. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dashboard_terminal.py +0 -0
  569. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dashboard_terminal_live.py +0 -0
  570. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_db.py +0 -0
  571. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dead_end.py +0 -0
  572. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_decomposition_chat.py +0 -0
  573. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_coord_db_backup.py +0 -0
  574. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_coord_web_dist.py +0 -0
  575. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_coord_web_rollback.py +0 -0
  576. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_drive_queue_unit.py +0 -0
  577. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_failure_notify_unit.py +0 -0
  578. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_manifest.py +0 -0
  579. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_notify_unit.py +0 -0
  580. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_units_lane.py +0 -0
  581. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deploy_web_unit.py +0 -0
  582. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deprecation_telemetry.py +0 -0
  583. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_deps.py +0 -0
  584. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_diagnose.py +0 -0
  585. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dispatch.py +0 -0
  586. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dispatch_target_validation.py +0 -0
  587. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_dist_name.py +0 -0
  588. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_done_housekeeping.py +0 -0
  589. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive.py +0 -0
  590. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_queue.py +0 -0
  591. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_queue_blocked_rendering.py +0 -0
  592. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_queue_launch_argv.py +0 -0
  593. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  594. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_queue_roll_pending.py +0 -0
  595. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  596. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_state.py +0 -0
  597. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_drive_tmux.py +0 -0
  598. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_epic_up_capability_detection.py +0 -0
  599. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  600. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_epic_up_image_provenance.py +0 -0
  601. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_errors.py +0 -0
  602. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_events.py +0 -0
  603. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_failure_class.py +0 -0
  604. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_filelock.py +0 -0
  605. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  606. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_fix_of_force_override.py +0 -0
  607. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_fleet_config_health.py +0 -0
  608. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_fleet_health_probes.py +0 -0
  609. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_fleet_health_snapshot.py +0 -0
  610. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_fleet_watchdog.py +0 -0
  611. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_forge_availability.py +0 -0
  612. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_freshness.py +0 -0
  613. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_gate_a.py +0 -0
  614. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_gate_b.py +0 -0
  615. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_gate_snapshot_staleness.py +0 -0
  616. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_gates.py +0 -0
  617. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  618. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_gen_mock_index.py +0 -0
  619. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_generated_rust_fixture.py +0 -0
  620. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_generated_rust_requests.py +0 -0
  621. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_generated_types_fixture.py +0 -0
  622. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_github_ops.py +0 -0
  623. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_github_throttle.py +0 -0
  624. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_goal.py +0 -0
  625. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_graph_health.py +0 -0
  626. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_graph_selfheal_absent_2237.py +0 -0
  627. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_handoff.py +0 -0
  628. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_checks.py +0 -0
  629. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_cli.py +0 -0
  630. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_cli_graph.py +0 -0
  631. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_config.py +0 -0
  632. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_context.py +0 -0
  633. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_coord_tui_ci_pin.py +0 -0
  634. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_coord_web_ci_pin.py +0 -0
  635. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_deploy_lane_facts.py +0 -0
  636. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_fix.py +0 -0
  637. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_incident_regression.py +0 -0
  638. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_issues_sync_staleness.py +0 -0
  639. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_pypi.py +0 -0
  640. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_registry.py +0 -0
  641. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_release_cordon_probe.py +0 -0
  642. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_timer_active.py +0 -0
  643. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_toolchain.py +0 -0
  644. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_unit_drift.py +0 -0
  645. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_unit_enablement.py +0 -0
  646. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_health_wedged_drive_queue.py +0 -0
  647. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_hooks.py +0 -0
  648. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_human_attended_437.py +0 -0
  649. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_init.py +0 -0
  650. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_install_agent_venv_2911.py +0 -0
  651. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_integration.py +0 -0
  652. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_briefing_echo.py +0 -0
  653. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_pane_log_2541.py +0 -0
  654. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_prefill_state.py +0 -0
  655. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_session_relaunch.py +0 -0
  656. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_test_verdict_backstop.py +0 -0
  657. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_token_attribution.py +0 -0
  658. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_interactive_worktree.py +0 -0
  659. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_issue_store_seam.py +0 -0
  660. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_issues_sync_status.py +0 -0
  661. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_liveness_auditor.py +0 -0
  662. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_liveness_notify.py +0 -0
  663. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_lock_contention_ratchet.py +0 -0
  664. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_machine_metrics.py +0 -0
  665. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_machine_onboard.py +0 -0
  666. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_machine_pause.py +0 -0
  667. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_merge_queue.py +0 -0
  668. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_merge_verify.py +0 -0
  669. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_milestone_chat.py +0 -0
  670. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_milestone_dispatch.py +0 -0
  671. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_milestone_gate.py +0 -0
  672. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_milestone_order.py +0 -0
  673. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_milestone_seam.py +0 -0
  674. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_mock_author.py +0 -0
  675. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_model_tiering.py +0 -0
  676. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_models.py +0 -0
  677. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_models_config_labels.py +0 -0
  678. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_needs_attention.py +0 -0
  679. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_network.py +0 -0
  680. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_new_issue_chat.py +0 -0
  681. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_next_release_tag.py +0 -0
  682. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_node_shim.py +0 -0
  683. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_baseline.py +0 -0
  684. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_cli.py +0 -0
  685. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_collect.py +0 -0
  686. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_config.py +0 -0
  687. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_drive_seam.py +0 -0
  688. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_isolation.py +0 -0
  689. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_predicate.py +0 -0
  690. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_quiet_hours.py +0 -0
  691. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notifier_service.py +0 -0
  692. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notify.py +0 -0
  693. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_notify_drain.py +0 -0
  694. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_openapi.py +0 -0
  695. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_operational_defaults.py +0 -0
  696. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_overlap_fence.py +0 -0
  697. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_overlap_predict.py +0 -0
  698. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_packaged_deploy_units.py +0 -0
  699. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_parentage.py +0 -0
  700. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_paste_landed.py +0 -0
  701. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  702. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_pipeline.py +0 -0
  703. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_plan_followup_approve_plan_command.py +0 -0
  704. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_plan_followup_pr_command.py +0 -0
  705. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_plan_followup_review_command.py +0 -0
  706. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_plan_only.py +0 -0
  707. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_plan_parser.py +0 -0
  708. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_platform_paths.py +0 -0
  709. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_portal_bridge.py +0 -0
  710. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_portal_config.py +0 -0
  711. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_portal_store.py +0 -0
  712. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_portal_sync.py +0 -0
  713. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_pr_body_lint.py +0 -0
  714. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_prereqs.py +0 -0
  715. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_production_db_guard.py +0 -0
  716. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_progress.py +0 -0
  717. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_provider_seam.py +0 -0
  718. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_providers.py +0 -0
  719. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_providers_config_labels.py +0 -0
  720. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_providers_pty.py +0 -0
  721. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_py_rust_mirror_inventory.py +0 -0
  722. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_quiet_hours.py +0 -0
  723. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_quiet_hours_store_2146.py +0 -0
  724. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reap_merged_sessions.py +0 -0
  725. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reap_stale_interactive_tick.py +0 -0
  726. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile.py +0 -0
  727. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_branch.py +0 -0
  728. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_completions.py +0 -0
  729. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  730. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_merges.py +0 -0
  731. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_no_agent_record.py +0 -0
  732. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_tick.py +0 -0
  733. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reconcile_usage_limit_done.py +0 -0
  734. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_refine_chat.py +0 -0
  735. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_cordon_2101.py +0 -0
  736. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  737. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_cordon_deadlock_2240.py +0 -0
  738. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_cordon_stuck_2490.py +0 -0
  739. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_propagate.py +0 -0
  740. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_propagate_threshold.py +0 -0
  741. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_roll_between_legs_2854.py +0 -0
  742. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_roll_window_handoff.py +0 -0
  743. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_unified_1242.py +0 -0
  744. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_verify.py +0 -0
  745. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_release_window.py +0 -0
  746. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_remote_auto_prune.py +0 -0
  747. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_remote_interactive_reaper.py +0 -0
  748. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_repo_add.py +0 -0
  749. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_repo_dormancy.py +0 -0
  750. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_repo_edit_2220.py +0 -0
  751. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_repo_graph_fleet_2237.py +0 -0
  752. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_repo_onboard_2220.py +0 -0
  753. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_report_result_push.py +0 -0
  754. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_reports.py +0 -0
  755. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_retry.py +0 -0
  756. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_retry_advisory_1606.py +0 -0
  757. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_retry_type_1636.py +0 -0
  758. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_revalidate.py +0 -0
  759. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review.py +0 -0
  760. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_end_review_without_verdict.py +0 -0
  761. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_parse_failure_diagnostic.py +0 -0
  762. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_reaffirm.py +0 -0
  763. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_state.py +0 -0
  764. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_verdict_backstop.py +0 -0
  765. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_verdict_override_audit.py +0 -0
  766. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_verdict_relay.py +0 -0
  767. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_review_zero_commits.py +0 -0
  768. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_scoped_review_wiring.py +0 -0
  769. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_scorecard.py +0 -0
  770. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_self_health.py +0 -0
  771. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_serve.py +0 -0
  772. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_serve_app.py +0 -0
  773. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_serve_app_board_trim.py +0 -0
  774. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_serve_rest_routes.py +0 -0
  775. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_session.py +0 -0
  776. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_slice_issue_attribution.py +0 -0
  777. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_smoke.py +0 -0
  778. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_smoke_live_checkout_restore.py +0 -0
  779. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_smoke_workflow.py +0 -0
  780. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_spend_ceiling.py +0 -0
  781. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_spend_ceiling_coordinator.py +0 -0
  782. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_split.py +0 -0
  783. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_split_work.py +0 -0
  784. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_sql_dialect.py +0 -0
  785. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_sqlite_connect_ratchet.py +0 -0
  786. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_stage_projection.py +0 -0
  787. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_stale_busy_reviewer_697.py +0 -0
  788. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_stalled_pipeline.py +0 -0
  789. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_state.py +0 -0
  790. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_state_review_findings_daemon.py +0 -0
  791. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_status_fleet_footer.py +0 -0
  792. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_stop_1567.py +0 -0
  793. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_store_contract.py +0 -0
  794. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_store_migrate.py +0 -0
  795. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_stuck.py +0 -0
  796. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  797. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_terminal_command.py +0 -0
  798. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_test_author.py +0 -0
  799. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_test_chat.py +0 -0
  800. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_test_orchestrator.py +0 -0
  801. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_test_report.py +0 -0
  802. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_test_verdict_parsing.py +0 -0
  803. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_test_verdict_transcript_floor.py +0 -0
  804. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_text_io_encoding_audit.py +0 -0
  805. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_thin_client_board_audit.py +0 -0
  806. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_thin_client_config_load_1080.py +0 -0
  807. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_thin_client_daemon_routing_906.py +0 -0
  808. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_tmux_host.py +0 -0
  809. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_tmux_session.py +0 -0
  810. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_transcript_floor.py +0 -0
  811. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_usage.py +0 -0
  812. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_usage_limits.py +0 -0
  813. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_usage_rollup.py +0 -0
  814. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_venv_live_install_2121.py +0 -0
  815. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_version_single_source.py +0 -0
  816. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_watch.py +0 -0
  817. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  818. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worker_env_venv_isolation.py +0 -0
  819. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worker_events.py +0 -0
  820. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worker_image_pin_sync.py +0 -0
  821. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worker_safety.py +0 -0
  822. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worker_test_scoping.py +0 -0
  823. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worktree.py +0 -0
  824. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  825. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/tests/test_write_parity.py +0 -0
  826. {code_coordinator-0.5.333 → code_coordinator-0.5.335}/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.335
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.335
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.335",
3
3
  "distance": 0,
4
- "node": "g05e864bdfa3476802900ee1d85295822957907e0",
4
+ "node": "gb914d712a7d0e11d9f9a30e4f62b05cf9b5e8c5c",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-01"
@@ -1085,3 +1085,39 @@ def fetch_report(
1085
1085
  raise ValueError(detail or f"report request rejected ({resp.status_code})")
1086
1086
  resp.raise_for_status()
1087
1087
  return resp.json()
1088
+
1089
+
1090
+ def fetch_machine_metrics(
1091
+ svc: ServiceConfig,
1092
+ params: dict[str, Any] | None = None,
1093
+ *,
1094
+ timeout: float = _DEFAULT_TIMEOUT,
1095
+ ) -> dict:
1096
+ """GET /machines/metrics from the daemon (#3021's read endpoint).
1097
+
1098
+ *params* (``since``/``resolution``/``machine``) forward straight through —
1099
+ :func:`coord.machine_metrics.resolve_since`/``build_metrics_response`` on the daemon side
1100
+ already own their validation vocabulary; this function does no interpretation of its own.
1101
+
1102
+ Mirrors :func:`fetch_report`'s error posture: a 400 (malformed ``since``/``resolution``) is
1103
+ a caller error, surfaced as :class:`ValueError` with the daemon's own message rather than a
1104
+ generic HTTP status. Everything else (network failure, timeout, 5xx) is left to raise
1105
+ ``httpx.HTTPError`` — the dashboard's ``GET /api/machines/metrics`` handler (#3022) turns
1106
+ that into an explicit "metrics unreachable" response rather than an empty-but-200 series.
1107
+ """
1108
+ resp = httpx.get(
1109
+ f"{svc.url}/machines/metrics",
1110
+ params={k: v for k, v in (params or {}).items() if v not in (None, "")},
1111
+ headers=_headers(svc),
1112
+ timeout=timeout,
1113
+ )
1114
+ if resp.status_code == 400:
1115
+ detail = ""
1116
+ try:
1117
+ body = resp.json()
1118
+ detail = body.get("error") or ""
1119
+ except Exception: # noqa: BLE001 — non-JSON error body; fall through
1120
+ detail = resp.text.strip()
1121
+ raise ValueError(detail or f"machine metrics request rejected ({resp.status_code})")
1122
+ resp.raise_for_status()
1123
+ return resp.json()
@@ -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
@@ -632,6 +631,55 @@ def openapi_spec() -> dict:
632
631
  "responses": {"200": {"description": "OK"}},
633
632
  }
634
633
  },
634
+ "/api/machines/metrics": {
635
+ "get": {
636
+ "summary": (
637
+ "Proxy of the daemon's GET /machines/metrics (#3021) -- per-machine "
638
+ "CPU/mem sample series for the Machines panel (#3022)"
639
+ ),
640
+ "parameters": [
641
+ {
642
+ "name": "since",
643
+ "in": "query",
644
+ "required": False,
645
+ "schema": {"type": "string"},
646
+ "description": (
647
+ "Epoch number, ISO-8601 timestamp, or duration (e.g. '6h') -- "
648
+ "forwarded to the daemon unexamined; see "
649
+ "coord.machine_metrics.resolve_since."
650
+ ),
651
+ },
652
+ {
653
+ "name": "resolution",
654
+ "in": "query",
655
+ "required": False,
656
+ "schema": {"type": "integer"},
657
+ "description": "Max points per machine after server-side downsampling.",
658
+ },
659
+ {
660
+ "name": "machine",
661
+ "in": "query",
662
+ "required": False,
663
+ "schema": {"type": "string"},
664
+ "description": "Restrict to one machine's series.",
665
+ },
666
+ ],
667
+ "responses": {
668
+ "200": {
669
+ "description": "OK -- daemon's versioned metrics payload, verbatim",
670
+ },
671
+ "400": {
672
+ "description": "The daemon rejected since/resolution as malformed",
673
+ },
674
+ "503": {
675
+ "description": (
676
+ "The daemon is unreachable -- an explicit "
677
+ "{error, reachable: false} body, never an empty series"
678
+ ),
679
+ },
680
+ },
681
+ }
682
+ },
635
683
  "/api/proposals": {
636
684
  "get": {
637
685
  "summary": "Pending brain proposals awaiting approve/reject",
@@ -1142,6 +1190,94 @@ def build_app(
1142
1190
  return
1143
1191
  write_board(board)
1144
1192
 
1193
+ def _read_board_and_machine_health() -> tuple: # -> tuple[Board, dict[str, dict]]
1194
+ """The board plus every configured machine's latest daemon-tick-
1195
+ refreshed health row, keyed by machine name (#3023).
1196
+
1197
+ Backs ``GET /api/machines``. Fetches both in ONE daemon round trip
1198
+ when this dashboard is a thin client (``board_service`` configured)
1199
+ instead of two independent ``GET /board`` calls — the review found
1200
+ that ``_read_machine_health()`` fetching its own payload and then
1201
+ ``_active_assignments_by_machine(_read_board())`` fetching a SECOND
1202
+ one doubled this endpoint's daemon I/O per client poll, which is
1203
+ exactly the per-request amplification #3023 exists to eliminate
1204
+ (just at a smaller scale than the fan-out it replaced). A thin
1205
+ client reads the daemon-published payload's
1206
+ ``fleet_health.machine_health`` sibling key — the tick-refreshed
1207
+ output of ``coord.health.fleet_snapshot.FleetHealthRefresher``
1208
+ (#1630) a board poll already carries — never a fresh per-request
1209
+ probe of the fleet. A dashboard co-located with the daemon (no
1210
+ ``board_service``) has no network cost to share in the first place:
1211
+ it reads the board from the local DB and the health rows straight
1212
+ out of the same local DB via ``coord.state.load_machine_health`` +
1213
+ ``coord.health.fleet_snapshot.machine_health_rows`` (the public
1214
+ wrapper ``FleetHealthRefresher.refresh()`` itself calls right after
1215
+ persisting) — so the two modes can't drift.
1216
+
1217
+ A machine absent from the health dict was never polled (fresh
1218
+ install, or nothing has ticked the health refresher yet) — callers
1219
+ must treat that the same as an ``unknown`` state, never as healthy
1220
+ (#1485's failure mode).
1221
+ """
1222
+ from coord import board_service # noqa: PLC0415
1223
+
1224
+ svc = board_service.resolve()
1225
+ if svc is not None:
1226
+ from coord.client import board_from_payload, fetch_board_payload # noqa: PLC0415
1227
+
1228
+ payload = fetch_board_payload(svc)
1229
+ board = board_from_payload(payload)
1230
+ rows = (payload.get("fleet_health") or {}).get("machine_health") or []
1231
+ return board, {row["machine"]: row for row in rows}
1232
+
1233
+ from coord.health.fleet_snapshot import machine_health_rows # noqa: PLC0415
1234
+ from coord.state import load_machine_health # noqa: PLC0415
1235
+
1236
+ board = _read_board()
1237
+ raw = load_machine_health()
1238
+ machine_names = [m.name for m in config.machines]
1239
+ rows = machine_health_rows(machine_names, raw, now=time.time())
1240
+ return board, {row["machine"]: row for row in rows}
1241
+
1242
+ def _active_assignments_by_machine(board) -> dict[str, list[dict]]: # noqa: ANN001
1243
+ """Group *board*'s RUNNING active assignments by machine (#3023).
1244
+
1245
+ Backs the legacy dashboard's per-machine "busy" card
1246
+ (``coord/dashboard/index.html``'s ``loadMachines()``), which used
1247
+ to come from a live per-agent ``GET /status`` probe. The board
1248
+ already carries the same fact — which issue a machine is currently
1249
+ running — from the normal board read path, so grouping it here
1250
+ costs no extra daemon I/O beyond what ``_read_board_and_machine_health()``
1251
+ already fetches.
1252
+
1253
+ Filters to ``status == "running"`` exactly like
1254
+ ``Board.idle_machines()`` and ``Board.active_files_by_repo()`` in
1255
+ ``coord/models.py`` do before treating an active-list entry as real,
1256
+ in-progress work — an unfiltered read of ``board.active`` would be a
1257
+ second, independent answer to "is this machine busy" that could
1258
+ diverge from those two (epic #2096 "one question, one answer").
1259
+ Every ``board.active.append()`` call site happens to set
1260
+ ``status="running"`` at append time today, and reconcile removes
1261
+ non-running entries the same tick it retags them, so this filter is
1262
+ currently a no-op in practice — which is exactly why the existing
1263
+ code defends against it twice already rather than trusting that
1264
+ invariant to hold forever.
1265
+ """
1266
+ out: dict[str, list[dict]] = {}
1267
+ for a in board.active:
1268
+ if a.status != "running":
1269
+ continue
1270
+ out.setdefault(a.machine_name, []).append({
1271
+ "assignment_id": a.assignment_id,
1272
+ "status": a.status,
1273
+ "spec": {
1274
+ "issue_number": a.issue_number,
1275
+ "issue_title": a.issue_title,
1276
+ "repo_name": a.repo_name,
1277
+ },
1278
+ })
1279
+ return out
1280
+
1145
1281
  def _read_drive_queue() -> list[dict]:
1146
1282
  """Every drive-queue row — seeded fixture or the daemon/local DB (#2428).
1147
1283
 
@@ -1350,30 +1486,161 @@ def build_app(
1350
1486
  })
1351
1487
 
1352
1488
  async def api_machines(request: Request) -> JSONResponse:
1489
+ """GET /api/machines — the fleet panel, from daemon-refreshed state (#3023).
1490
+
1491
+ Used to do a synchronous fan-out probe on every request: ``GET
1492
+ /health`` against every configured machine, then ``GET /status``
1493
+ against every one that answered — seconds of worst-case latency,
1494
+ multiplied by every connected client polling this panel live. Now
1495
+ serves the SAME state the board daemon's tick loop already
1496
+ refreshes on its own cadence, plus the board this dashboard reads
1497
+ for every other panel anyway, both from ONE combined read
1498
+ (``_read_board_and_machine_health()``) — zero per-request network
1499
+ fan-out to the fleet, whether this dashboard is co-located with the
1500
+ daemon or a thin client of it.
1501
+
1502
+ Design decision (#3023 review): each active assignment's ``spec``
1503
+ (issue/repo) is included, but the live ``STATUS:``/``STUCK:``
1504
+ per-worker progress tail (``a.progress.updates`` / ``a.progress.stuck``
1505
+ in the pre-#3023 shape) is NOT. That data only ever existed as a
1506
+ fresh tail-read of the OWNING machine's own log file — see
1507
+ ``AgentServer.progress()``/``list_assignments()`` in ``coord/agent.py``
1508
+ ("only this machine can see its own log file — the coordinator
1509
+ cannot stat a remote path") — so serving it here would mean putting
1510
+ the exact per-request fan-out probe this endpoint exists to remove
1511
+ right back in, just hidden one level down. ``coord/dashboard/index.html``
1512
+ no longer reads those two keys; live per-worker progress is still
1513
+ available via ``coord status`` / ``coord log <id> -f``, which DO pay
1514
+ for a targeted probe of the one machine in question rather than
1515
+ every machine on every dashboard poll.
1516
+ """
1353
1517
  if _fixture is not None:
1354
1518
  # Seeded reachability — never probe the fleet in fixture mode.
1355
1519
  return JSONResponse(_fixture.machines())
1356
- statuses = check_all(config.machines, timeout=3.0)
1520
+ board, health_by_name = _read_board_and_machine_health()
1521
+ assignments_by_machine = _active_assignments_by_machine(board)
1357
1522
  result = []
1358
- for s in statuses:
1523
+ for m in config.machines:
1524
+ row = health_by_name.get(m.name) or {}
1359
1525
  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,
1526
+ "name": m.name,
1527
+ "host": m.host,
1528
+ "repos": m.repos,
1529
+ "state": row.get("state", "unknown"),
1530
+ "reason": row.get("reason", ""),
1531
+ "latency_ms": row.get("latency_ms"),
1532
+ # #3023: agent's own running version — compared against
1533
+ # this coordinator's local version by consumers (coord-tui's
1534
+ # `machine_detail_list` shows it red on a mismatch) — and
1535
+ # total on-disk size of this agent's git worktrees. Both
1536
+ # ride the same tick-refreshed health blob as everything
1537
+ # else here; see `coord.health.fleet_snapshot.refresh`.
1538
+ "agent_version": row.get("agent_runtime_version"),
1539
+ "worktree_bytes": row.get("worktree_bytes"),
1366
1540
  }
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
1541
+ active = assignments_by_machine.get(m.name)
1542
+ if active:
1543
+ machine_data["assignments"] = {"active": active}
1374
1544
  result.append(machine_data)
1375
1545
  return JSONResponse(result)
1376
1546
 
1547
+ def _machine_metrics_daemon_target(): # -> coord.client.ServiceConfig
1548
+ """Where ``GET /api/machines/metrics`` actually reaches for data (#3022).
1549
+
1550
+ Resolves daemon-vs-local exactly like ``_read_board()``/
1551
+ ``_read_drive_queue()``: ``board_service.resolve()`` first, so a
1552
+ thin-client dashboard reaches the fleet's real daemon over Tailscale.
1553
+
1554
+ Unlike the board or the drive queue, though, there is no on-disk
1555
+ local fallback here. The metrics ring buffer
1556
+ (``coord.machine_metrics.MachineMetricsSampler``, #3020) lives ONLY
1557
+ in the ``coord serve`` process's memory, by design (see that
1558
+ module's "No persistence" note) — the identical "introspection of a
1559
+ running interpreter" situation
1560
+ ``coord.release_verify._default_board_fetch`` already solved for
1561
+ reading the daemon's own version off the daemon host. So "local"
1562
+ here still costs one HTTP hop, just a loopback one to THIS host's
1563
+ own daemon (``127.0.0.1:SERVE_PORT``, same
1564
+ ``resolve_serve_token()`` bearer-token convention) rather than a
1565
+ Tailscale round trip to a configured ``board_service`` URL — never
1566
+ a recursive call back into this same dashboard process.
1567
+ """
1568
+ from coord import board_service # noqa: PLC0415
1569
+ from coord.client import ServiceConfig # noqa: PLC0415
1570
+
1571
+ svc = board_service.resolve()
1572
+ if svc is not None:
1573
+ return svc
1574
+ from coord.serve_app import SERVE_PORT, resolve_serve_token # noqa: PLC0415
1575
+
1576
+ return ServiceConfig(
1577
+ url=f"http://127.0.0.1:{SERVE_PORT}", token=resolve_serve_token()
1578
+ )
1579
+
1580
+ async def api_machine_metrics(request: Request) -> JSONResponse:
1581
+ """GET /api/machines/metrics — proxy the daemon's GET /machines/metrics
1582
+ (#3021) so the Machines panel's own origin (``coord web``, port 7434)
1583
+ can chart it without the browser needing to reach the daemon's
1584
+ separate port 7435 directly (#3022).
1585
+
1586
+ Forwards ``since``/``resolution``/``machine`` straight through,
1587
+ unexamined — the daemon
1588
+ (``coord.machine_metrics.resolve_since``/``build_metrics_response``)
1589
+ already owns their validation vocabulary and this handler must not
1590
+ duplicate or drift from it. See ``_machine_metrics_daemon_target()``
1591
+ for how daemon-vs-local is resolved.
1592
+
1593
+ Fixture mode has no live sampler to simulate at all, so it always
1594
+ reports the same explicit-unreachable shape a real unreachable
1595
+ daemon would (below) rather than pretending to have live data —
1596
+ mirrors ``api_machines``' "never probe the fleet in fixture mode",
1597
+ just with nothing to seed instead of a canned reachable answer.
1598
+
1599
+ Degrades honestly (#3022): a daemon that is unreachable (down,
1600
+ network partition, wrong token) comes back as an explicit
1601
+ ``{"error": ..., "reachable": false}`` body with a 503 — never a 200
1602
+ with an empty/short series a renderer could mistake for "fleet
1603
+ quiet, all healthy". That is the same failure mode
1604
+ ``coord.machine_metrics`` already guards against for a single
1605
+ unresponsive agent (its ``status="unknown"`` samples), just
1606
+ extended here to "the whole daemon didn't answer". A 400 the daemon
1607
+ itself raised for a malformed ``since``/``resolution`` is forwarded
1608
+ as a 400, not folded into the unreachable state — that's the
1609
+ caller's bad input, not a daemon health problem.
1610
+ """
1611
+ if _fixture is not None:
1612
+ return JSONResponse(
1613
+ {
1614
+ "error": "machine metrics have no fixture source",
1615
+ "reachable": False,
1616
+ },
1617
+ status_code=503,
1618
+ )
1619
+
1620
+ from coord.client import fetch_machine_metrics # noqa: PLC0415
1621
+
1622
+ svc = _machine_metrics_daemon_target()
1623
+ qp = request.query_params
1624
+ params = {
1625
+ "since": qp.get("since"),
1626
+ "resolution": qp.get("resolution"),
1627
+ "machine": qp.get("machine"),
1628
+ }
1629
+ try:
1630
+ result = fetch_machine_metrics(svc, params)
1631
+ except ValueError as e:
1632
+ return JSONResponse({"error": str(e)}, status_code=400)
1633
+ except Exception as e: # noqa: BLE001 — network failure/timeout/daemon 5xx: all "unreachable"
1634
+ return JSONResponse(
1635
+ {
1636
+ "error": "machine metrics daemon unreachable",
1637
+ "detail": str(e),
1638
+ "reachable": False,
1639
+ },
1640
+ status_code=503,
1641
+ )
1642
+ return JSONResponse(result)
1643
+
1377
1644
  async def api_sessions(request: Request) -> JSONResponse:
1378
1645
  """GET /api/sessions — live coord-* interactive sessions the phone can
1379
1646
  attach to via GET /ws/terminal/{session_id} (#1066).
@@ -2840,6 +3107,7 @@ def build_app(
2840
3107
  Route("/", index, methods=["GET"]),
2841
3108
  Route("/api/board", api_board, methods=["GET"]),
2842
3109
  Route("/api/machines", api_machines, methods=["GET"]),
3110
+ Route("/api/machines/metrics", api_machine_metrics, methods=["GET"]),
2843
3111
  Route("/api/sessions", api_sessions, methods=["GET"]),
2844
3112
  Route("/api/proposals", api_proposals, methods=["GET"]),
2845
3113
  Route("/api/drive-queue", api_drive_queue, methods=["GET"]),
@@ -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