code-coordinator 0.5.291__tar.gz → 0.5.293__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 (892) hide show
  1. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/SOURCES.txt +3 -0
  4. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/scm_file_list.json +3 -0
  5. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/scm_version.json +2 -2
  6. code_coordinator-0.5.293/coord/board_service.py +342 -0
  7. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/client.py +119 -1
  8. code_coordinator-0.5.293/coord/deprecation_telemetry.py +102 -0
  9. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/reports.py +194 -0
  10. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/serve_app.py +54 -0
  11. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/state.py +214 -90
  12. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/conftest.py +18 -0
  13. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_issue_comment.py +9 -5
  14. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_issue_create_label.py +16 -10
  15. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_issue_reopen.py +7 -5
  16. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_assign.py +19 -16
  17. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_remove_and_issue_close.py +26 -13
  18. code_coordinator-0.5.293/tests/test_client_resource_migration_1946.py +533 -0
  19. code_coordinator-0.5.293/tests/test_deprecation_telemetry.py +224 -0
  20. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reports.py +160 -7
  21. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_serve.py +51 -34
  22. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_smoke.py +21 -13
  23. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_sqlite_connect_ratchet.py +28 -0
  24. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_state.py +21 -5
  25. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_thin_client_daemon_routing_906.py +91 -42
  26. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/data.rs +10 -1
  27. code_coordinator-0.5.291/coord/board_service.py +0 -141
  28. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.claude/commands/board.md +0 -0
  29. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.claude/commands/complete-session.md +0 -0
  30. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.claude/commands/coordinator.md +0 -0
  31. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.githooks/_lib.sh +0 -0
  32. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.githooks/post-checkout +0 -0
  33. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.githooks/post-commit +0 -0
  34. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.githooks/post-merge +0 -0
  35. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  36. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.github/coord-ci-acceptance.yml +0 -0
  37. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.github/workflows/auto-release.yml +0 -0
  38. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.github/workflows/cargo-test.yml +0 -0
  39. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.github/workflows/publish.yml +0 -0
  40. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.github/workflows/test.yml +0 -0
  41. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/.gitignore +0 -0
  42. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/CLAUDE.md +0 -0
  43. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/GOAL.md +0 -0
  44. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/LICENSE +0 -0
  45. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/MANIFEST.in +0 -0
  46. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/README.md +0 -0
  47. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/dependency_links.txt +0 -0
  48. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/entry_points.txt +0 -0
  49. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/requires.txt +0 -0
  50. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/code_coordinator.egg-info/top_level.txt +0 -0
  51. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/__init__.py +0 -0
  52. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/_board_mapping.py +0 -0
  53. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/acceptance.py +0 -0
  54. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/acceptance_drivers.py +0 -0
  55. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/agent.py +0 -0
  56. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/agent_app.py +0 -0
  57. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/agent_update.py +0 -0
  58. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/agents/opencode/.gitignore +0 -0
  59. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/agents/opencode/agents/work.md +0 -0
  60. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/agents/opencode/routing.jsonc +0 -0
  61. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/approved_work.py +0 -0
  62. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/audit.py +0 -0
  63. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/auto_loop.py +0 -0
  64. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/block_log.py +0 -0
  65. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/board_schema.py +0 -0
  66. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/board_wire.py +0 -0
  67. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/brain.py +0 -0
  68. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/branch_model.py +0 -0
  69. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/bug_intake.py +0 -0
  70. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/cargo_cache.py +0 -0
  71. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/ci_fix.py +0 -0
  72. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/ci_github.py +0 -0
  73. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/ci_gitlab.py +0 -0
  74. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/ci_store.py +0 -0
  75. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/claim.py +0 -0
  76. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/cli.py +0 -0
  77. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/__init__.py +0 -0
  78. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/_common.py +0 -0
  79. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/acceptance.py +0 -0
  80. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/agent_ops.py +0 -0
  81. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/audit.py +0 -0
  82. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/chat.py +0 -0
  83. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/dispatch.py +0 -0
  84. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/dispatch_workers.py +0 -0
  85. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/drive.py +0 -0
  86. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/drive_queue.py +0 -0
  87. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/gate_a.py +0 -0
  88. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/gates.py +0 -0
  89. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/issues.py +0 -0
  90. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/lifecycle.py +0 -0
  91. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/machine.py +0 -0
  92. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/merge.py +0 -0
  93. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/milestone.py +0 -0
  94. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/plan_followup.py +0 -0
  95. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/plans.py +0 -0
  96. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/portal.py +0 -0
  97. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/pr.py +0 -0
  98. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/release.py +0 -0
  99. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/repo.py +0 -0
  100. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/report.py +0 -0
  101. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/review.py +0 -0
  102. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/scorecard.py +0 -0
  103. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/sessions.py +0 -0
  104. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/setup.py +0 -0
  105. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/status.py +0 -0
  106. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/store_migrate.py +0 -0
  107. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/terminal.py +0 -0
  108. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/test_gate.py +0 -0
  109. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/commands/tui.py +0 -0
  110. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/comments.py +0 -0
  111. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/config.py +0 -0
  112. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/config_reload.py +0 -0
  113. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/confirm_test.py +0 -0
  114. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/conflict_fix.py +0 -0
  115. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dao.py +0 -0
  116. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dashboard/__init__.py +0 -0
  117. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dashboard/fixture.py +0 -0
  118. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dashboard/index.html +0 -0
  119. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dashboard/server.py +0 -0
  120. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dashboard/terminal.py +0 -0
  121. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/db.py +0 -0
  122. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dead_end.py +0 -0
  123. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/decomposition_chat.py +0 -0
  124. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/README.md +0 -0
  125. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-agent.service +0 -0
  126. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-db-backup.service +0 -0
  127. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-db-backup.sh +0 -0
  128. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-db-backup.timer +0 -0
  129. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-drive-queue.service +0 -0
  130. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-drive-queue.timer +0 -0
  131. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-failure-notify.service +0 -0
  132. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-fleet-watchdog.service +0 -0
  133. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  134. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-notify.service +0 -0
  135. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-notify.timer +0 -0
  136. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-release-propagate.service +0 -0
  137. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-release-propagate.timer +0 -0
  138. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-release-window.service +0 -0
  139. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-release-window.timer +0 -0
  140. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-serve.service +0 -0
  141. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-web-dist-build.service +0 -0
  142. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-web-dist-build.timer +0 -0
  143. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy/coord-web.service +0 -0
  144. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy_manifest.py +0 -0
  145. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deploy_units.py +0 -0
  146. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/deps.py +0 -0
  147. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/diagnose.py +0 -0
  148. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dispatch.py +0 -0
  149. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/dist_name.py +0 -0
  150. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/drive_state.py +0 -0
  153. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/events.py +0 -0
  154. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/failure_class.py +0 -0
  155. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/filelock.py +0 -0
  156. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/fleet_config_health.py +0 -0
  157. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/forge_availability.py +0 -0
  158. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/freshness.py +0 -0
  159. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/gate_a.py +0 -0
  160. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/gate_b.py +0 -0
  161. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/gate_snapshot.py +0 -0
  162. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/gates.py +0 -0
  163. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/github_ops.py +0 -0
  164. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/github_throttle.py +0 -0
  165. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/goal.py +0 -0
  166. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/graph_health.py +0 -0
  167. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/__init__.py +0 -0
  168. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/aggregate.py +0 -0
  169. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/__init__.py +0 -0
  170. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/agent_install.py +0 -0
  171. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/cargo_targets.py +0 -0
  172. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/claude_binary.py +0 -0
  173. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/coord_web_ci_pin.py +0 -0
  174. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/deploy_lane_facts.py +0 -0
  175. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/disk.py +0 -0
  176. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/fleet_board.py +0 -0
  177. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  178. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/fleet_phantom.py +0 -0
  179. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/fleet_unit_drift.py +0 -0
  180. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/graph.py +0 -0
  181. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/graphify_cli.py +0 -0
  182. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/index_lock.py +0 -0
  183. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/issues_sync_staleness.py +0 -0
  184. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/plan_usage.py +0 -0
  185. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/release_cordon.py +0 -0
  186. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/repo_state.py +0 -0
  187. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/spawned_coord.py +0 -0
  188. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/stalled_pipeline.py +0 -0
  189. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/timer_active.py +0 -0
  190. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/toolchain.py +0 -0
  191. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/unit_drift.py +0 -0
  192. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/unit_enablement.py +0 -0
  193. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/checks/worktrees.py +0 -0
  194. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/cli.py +0 -0
  195. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/context.py +0 -0
  196. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/fleet_snapshot.py +0 -0
  197. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/models.py +0 -0
  198. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/pypi.py +0 -0
  199. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/registry.py +0 -0
  200. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/render.py +0 -0
  201. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/health/units.py +0 -0
  202. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/hooks.py +0 -0
  203. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/housekeeping.py +0 -0
  204. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/interactive.py +0 -0
  205. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/issue_store.py +0 -0
  206. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/issues_sync_status.py +0 -0
  207. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/liveness_auditor.py +0 -0
  208. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/machine_onboard.py +0 -0
  209. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/machine_pause.py +0 -0
  210. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/merge_queue.py +0 -0
  211. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/milestone_chat.py +0 -0
  212. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/milestone_dispatch.py +0 -0
  213. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/milestone_gate.py +0 -0
  214. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/milestone_order.py +0 -0
  215. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/mock_author.py +0 -0
  216. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/models.py +0 -0
  217. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/network.py +0 -0
  218. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/new_issue_chat.py +0 -0
  219. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/__init__.py +0 -0
  220. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/baseline.py +0 -0
  221. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/cli.py +0 -0
  222. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/collect.py +0 -0
  223. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/digest.py +0 -0
  224. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/models.py +0 -0
  225. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/predicate.py +0 -0
  226. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/service.py +0 -0
  227. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/store.py +0 -0
  228. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notifier/transport.py +0 -0
  229. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/notify.py +0 -0
  230. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/openapi.py +0 -0
  231. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/overlap_fence.py +0 -0
  232. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/overlap_predict.py +0 -0
  233. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/parentage.py +0 -0
  234. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/parentage_github.py +0 -0
  235. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/pipeline.py +0 -0
  236. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/plan_parser.py +0 -0
  237. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/plans.py +0 -0
  238. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/platform_paths.py +0 -0
  239. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/portal_bridge.py +0 -0
  240. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/portal_store.py +0 -0
  241. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/portal_sync.py +0 -0
  242. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/pr_body_lint.py +0 -0
  243. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/prereqs.py +0 -0
  244. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/progress.py +0 -0
  245. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/providers/__init__.py +0 -0
  246. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/providers/base.py +0 -0
  247. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/providers/claude.py +0 -0
  248. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/providers/claude_pty.py +0 -0
  249. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/providers/opencode.py +0 -0
  250. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/queue_diagnose.py +0 -0
  251. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/reconcile.py +0 -0
  252. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/reconcile_tick.py +0 -0
  253. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/refine_chat.py +0 -0
  254. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/release_cordon.py +0 -0
  255. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/release_propagate.py +0 -0
  256. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/release_verify.py +0 -0
  257. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/release_window.py +0 -0
  258. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/repo_edit.py +0 -0
  259. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/repo_onboard.py +0 -0
  260. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/rest_schema.py +0 -0
  261. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/revalidate.py +0 -0
  262. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/review.py +0 -0
  263. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/scorecard.py +0 -0
  264. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/self_health.py +0 -0
  265. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  266. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  267. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  268. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  269. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  270. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/portal-followup/SKILL.md +0 -0
  271. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/release-now/SKILL.md +0 -0
  272. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  273. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  274. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/skills/update-issue/SKILL.md +0 -0
  275. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/smoke.py +0 -0
  276. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/spend_ceiling.py +0 -0
  277. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/split_work.py +0 -0
  278. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/sql.py +0 -0
  279. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/stage_projection.py +0 -0
  280. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/store_migrate.py +0 -0
  281. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/test_author.py +0 -0
  282. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/test_chat.py +0 -0
  283. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/test_orchestrator.py +0 -0
  284. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/test_report.py +0 -0
  285. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/tui_release.py +0 -0
  286. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/usage.py +0 -0
  287. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/usage_limits.py +0 -0
  288. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/usage_rollup.py +0 -0
  289. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coord/worker_events.py +0 -0
  290. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/coordinator.example.yml +0 -0
  291. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-agent.service +0 -0
  292. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-db-backup.service +0 -0
  293. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-db-backup.sh +0 -0
  294. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-db-backup.timer +0 -0
  295. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-drive-queue.service +0 -0
  296. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-drive-queue.timer +0 -0
  297. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-failure-notify.service +0 -0
  298. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-failure-notify.sh +0 -0
  299. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-fleet-watchdog.service +0 -0
  300. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-fleet-watchdog.timer +0 -0
  301. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-notify.service +0 -0
  302. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-notify.timer +0 -0
  303. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-release-propagate.service +0 -0
  304. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-release-propagate.timer +0 -0
  305. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-release-window.service +0 -0
  306. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-release-window.timer +0 -0
  307. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-serve.service +0 -0
  308. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-web-dist-build.service +0 -0
  309. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-web-dist-build.sh +0 -0
  310. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-web-dist-build.timer +0 -0
  311. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-web-rollback.sh +0 -0
  312. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/coord-web.service +0 -0
  313. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/deploy/node-shim.sh +0 -0
  314. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ADR_COORD_TUI_CI.md +0 -0
  315. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  316. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ADR_COORD_WEB_CI.md +0 -0
  317. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ADR_COORD_WEB_DIST.md +0 -0
  318. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/AGENT_OPERATIONS.md +0 -0
  319. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ARCHITECTURE.md +0 -0
  320. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ARCH_SECURITY_GATES.md +0 -0
  321. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/COCKPIT.md +0 -0
  322. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/CONTROL_CENTER.md +0 -0
  323. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/COST_DISCIPLINE.md +0 -0
  324. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/CROSS_PLATFORM.md +0 -0
  325. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/CUSTOMER_FACING_APPS.md +0 -0
  326. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/CUSTOMER_PORTAL.md +0 -0
  327. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/DRIVE_QUEUE.md +0 -0
  328. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/EPHEMERAL_WORKERS.md +0 -0
  329. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/FORGE_MIGRATION.md +0 -0
  330. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/GRAPHIFY_SETUP.md +0 -0
  331. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ISSUE_GUIDANCE.md +0 -0
  332. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/MAC_MINI.md +0 -0
  333. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  334. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/NOTIFIER.md +0 -0
  335. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/OPENCODE_VERIFICATION.md +0 -0
  336. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/OPERATING_GOTCHAS.md +0 -0
  337. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/OPERATOR_GUIDES.md +0 -0
  338. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/ORACLE_LOOP.md +0 -0
  339. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/PHONE_WEBAPP.md +0 -0
  340. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/PIPELINE_V2.md +0 -0
  341. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/PLATFORM_EVOLUTION.md +0 -0
  342. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/SECOND_BACKEND.md +0 -0
  343. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/STORE_SERVICE.md +0 -0
  344. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  345. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/WEB_CONTROL_CENTER.md +0 -0
  346. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/WSL_WINDOWS_WORKER.md +0 -0
  347. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/mocks/web/README.md +0 -0
  348. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/mocks/web/_tokens.css +0 -0
  349. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/mocks/web/issue-detail.html +0 -0
  350. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/mocks/web/pipeline-narrow.html +0 -0
  351. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/docs/mocks/web/pipeline-wide.html +0 -0
  352. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/graphify-out/.gitignore +0 -0
  353. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/install-agent.sh +0 -0
  354. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/pyproject.toml +0 -0
  355. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/audit_review_verdict_overrides.py +0 -0
  356. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  357. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/build-worker-image.sh +0 -0
  358. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/coordinator-machine.py +0 -0
  359. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/epic-down.sh +0 -0
  360. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/epic-up.sh +0 -0
  361. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/preflight.sh +0 -0
  362. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/provision-worker.sh +0 -0
  363. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  364. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  365. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/azure-workers/verify-github-token.sh +0 -0
  366. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/check_gh_argv_containment.py +0 -0
  367. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/codegen.py +0 -0
  368. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/coord-test-runner.sh +0 -0
  369. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/coord-venv-rollback.sh +0 -0
  370. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/drive-batch.sh +0 -0
  371. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/fleet_watchdog.py +0 -0
  372. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/gen_board_fixture.py +0 -0
  373. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/gen_mock_index.py +0 -0
  374. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/next_release_tag.py +0 -0
  375. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/run_tests_in_populated_home.sh +0 -0
  376. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/run_tests_without_gh.sh +0 -0
  377. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/smoke_437_interactive.py +0 -0
  378. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/verify_878_review_capture.py +0 -0
  379. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/verify_release_published.py +0 -0
  380. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/scripts/verify_release_wheel.py +0 -0
  381. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/setup.cfg +0 -0
  382. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/SMOKE_SET.md +0 -0
  383. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/__init__.py +0 -0
  384. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-37/conftest.py +0 -0
  385. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-37/contract.md +0 -0
  386. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-37/manifest.yml +0 -0
  387. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  388. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  389. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-51/contract.md +0 -0
  390. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  391. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  392. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-51/manifest.yml +0 -0
  393. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  394. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-51/tsconfig.json +0 -0
  395. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  396. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/backends.py +0 -0
  397. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/board-pipeline-basic.json +0 -0
  398. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  399. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  400. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  401. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  402. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/all_pass.json +0 -0
  403. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  404. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/mixed_fail.json +0 -0
  405. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  406. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  407. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/skip.json +0 -0
  408. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/playwright/truncated.json +0 -0
  409. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  410. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  411. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  412. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  413. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  414. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  415. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  416. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  417. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_acceptance.py +0 -0
  418. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_acceptance_drivers.py +0 -0
  419. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent.py +0 -0
  420. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_api_error.py +0 -0
  421. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_app.py +0 -0
  422. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_branch_base.py +0 -0
  423. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_branch_capture.py +0 -0
  424. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_config_free_1712.py +0 -0
  425. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_deploy_units_endpoint.py +0 -0
  426. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_dirty_worktree.py +0 -0
  427. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  428. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_graph_self_heal.py +0 -0
  429. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_health_h3.py +0 -0
  430. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_idle_restart.py +0 -0
  431. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_push_failure.py +0 -0
  432. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_reap.py +0 -0
  433. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_repos_and_pull.py +0 -0
  434. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_restart_services_endpoint.py +0 -0
  435. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_skills_self_heal.py +0 -0
  436. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_startup_diagnostics.py +0 -0
  437. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_update.py +0 -0
  438. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_update_bluegreen.py +0 -0
  439. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_usage_limit.py +0 -0
  440. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_agent_zero_commit.py +0 -0
  441. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_ambient_home_isolation.py +0 -0
  442. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_approve_dependency_busy_2804.py +0 -0
  443. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_approve_reject_plan.py +0 -0
  444. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_approve_usage_gate.py +0 -0
  445. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_approved_work_2532.py +0 -0
  446. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_assignment_already_recorded_daemon.py +0 -0
  447. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_audit_log.py +0 -0
  448. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_audit_outcome.py +0 -0
  449. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_audit_query.py +0 -0
  450. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_auto_loop.py +0 -0
  451. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_auto_release_publish_2035.py +0 -0
  452. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_backend_selection.py +0 -0
  453. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_base_checkout_restore.py +0 -0
  454. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_block_log.py +0 -0
  455. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_cap_762.py +0 -0
  456. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_fixture.py +0 -0
  457. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_read_path.py +0 -0
  458. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_schema.py +0 -0
  459. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_service.py +0 -0
  460. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_state.py +0 -0
  461. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_board_wire.py +0 -0
  462. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_brain.py +0 -0
  463. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_branch_model.py +0 -0
  464. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_bug_intake.py +0 -0
  465. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_build_worker_image_env_update.py +0 -0
  466. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cargo_cache.py +0 -0
  467. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_check_gh_argv_containment.py +0 -0
  468. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_ci_acceptance_gate_1950.py +0 -0
  469. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_ci_fix.py +0 -0
  470. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_ci_gitlab.py +0 -0
  471. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_ci_parity_2091.py +0 -0
  472. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_ci_store.py +0 -0
  473. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_claim.py +0 -0
  474. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_claude_md_budget.py +0 -0
  475. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_acceptance.py +0 -0
  476. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_assign.py +0 -0
  477. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  478. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_assign_interactive_remote.py +0 -0
  479. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_assign_provider.py +0 -0
  480. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  481. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_audit.py +0 -0
  482. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_chat_continue.py +0 -0
  483. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_decide.py +0 -0
  484. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_diagnose_config_provenance.py +0 -0
  485. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_diagnose_forge_availability.py +0 -0
  486. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_diagnose_graph.py +0 -0
  487. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_diagnose_self.py +0 -0
  488. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_doctor.py +0 -0
  489. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_doctor_config_free_1801.py +0 -0
  490. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  491. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_drive.py +0 -0
  492. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_drive_queue.py +0 -0
  493. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_escalate.py +0 -0
  494. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_fix_headless_review.py +0 -0
  495. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_gate_a.py +0 -0
  496. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_install_drift.py +0 -0
  497. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_install_skills.py +0 -0
  498. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_issue_view_list.py +0 -0
  499. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_merge.py +0 -0
  500. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_capture.py +0 -0
  501. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_chat_add_child.py +0 -0
  502. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_dispatch.py +0 -0
  503. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_gate_b.py +0 -0
  504. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_gate_c.py +0 -0
  505. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_order.py +0 -0
  506. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_milestone_ship.py +0 -0
  507. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_network.py +0 -0
  508. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_new_issue_chat.py +0 -0
  509. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_plans.py +0 -0
  510. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_portal.py +0 -0
  511. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_pr.py +0 -0
  512. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_pull_artifact.py +0 -0
  513. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_queue.py +0 -0
  514. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_reattach_sessions.py +0 -0
  515. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_refine_board.py +0 -0
  516. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_release_preflight.py +0 -0
  517. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_release_propagate.py +0 -0
  518. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_release_window.py +0 -0
  519. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_repo_2220.py +0 -0
  520. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  521. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_scorecard.py +0 -0
  522. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_set_review_findings.py +0 -0
  523. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_advisory_terminal.py +0 -0
  524. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_contested_tag.py +0 -0
  525. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_merge_queue.py +0 -0
  526. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_provider.py +0 -0
  527. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_review_finalizing.py +0 -0
  528. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_test_failed_tag.py +0 -0
  529. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_status_usage_limit.py +0 -0
  530. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_sync_comments_873.py +0 -0
  531. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_test_plan.py +0 -0
  532. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_track.py +0 -0
  533. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_tui_update.py +0 -0
  534. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cli_wait.py +0 -0
  535. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_client_base_install.py +0 -0
  536. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_commands_common.py +0 -0
  537. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_comments.py +0 -0
  538. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_completion_summary.py +0 -0
  539. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_config.py +0 -0
  540. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_config_acceptance.py +0 -0
  541. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_config_audit.py +0 -0
  542. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_config_pricing.py +0 -0
  543. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  544. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_config_usage_gate.py +0 -0
  545. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_confirm_test.py +0 -0
  546. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_conflict_fix.py +0 -0
  547. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_conflict_fix_semantic.py +0 -0
  548. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  549. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_test.py +0 -0
  550. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_test_runner_baseline.py +0 -0
  551. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_test_runner_populated_home.py +0 -0
  552. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_test_runner_routing.py +0 -0
  553. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_test_runner_toolchain.py +0 -0
  554. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_uat.py +0 -0
  555. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coord_web_sse_restart_live.py +0 -0
  556. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_coordinator_machine.py +0 -0
  557. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_cross_platform_imports.py +0 -0
  558. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dao.py +0 -0
  559. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dashboard.py +0 -0
  560. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dashboard_fixture.py +0 -0
  561. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dashboard_terminal.py +0 -0
  562. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dashboard_terminal_live.py +0 -0
  563. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_db.py +0 -0
  564. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dead_end.py +0 -0
  565. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_decomposition_chat.py +0 -0
  566. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_coord_db_backup.py +0 -0
  567. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_coord_web_dist.py +0 -0
  568. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_coord_web_rollback.py +0 -0
  569. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_drive_queue_unit.py +0 -0
  570. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_failure_notify_unit.py +0 -0
  571. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_manifest.py +0 -0
  572. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_notify_unit.py +0 -0
  573. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_units_lane.py +0 -0
  574. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deploy_web_unit.py +0 -0
  575. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_deps.py +0 -0
  576. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_diagnose.py +0 -0
  577. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dispatch.py +0 -0
  578. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dispatch_target_validation.py +0 -0
  579. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_dist_name.py +0 -0
  580. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_done_housekeeping.py +0 -0
  581. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive.py +0 -0
  582. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_queue.py +0 -0
  583. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_queue_blocked_rendering.py +0 -0
  584. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_queue_launch_argv.py +0 -0
  585. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  586. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_queue_roll_pending.py +0 -0
  587. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  588. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_state.py +0 -0
  589. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_drive_tmux.py +0 -0
  590. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_epic_up_capability_detection.py +0 -0
  591. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  592. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_epic_up_image_provenance.py +0 -0
  593. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_errors.py +0 -0
  594. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_events.py +0 -0
  595. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_failure_class.py +0 -0
  596. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_filelock.py +0 -0
  597. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  598. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_fix_of_force_override.py +0 -0
  599. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_fleet_config_health.py +0 -0
  600. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_fleet_health_probes.py +0 -0
  601. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_fleet_health_snapshot.py +0 -0
  602. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_fleet_watchdog.py +0 -0
  603. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_forge_availability.py +0 -0
  604. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_freshness.py +0 -0
  605. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_gate_a.py +0 -0
  606. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_gate_b.py +0 -0
  607. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_gate_snapshot_staleness.py +0 -0
  608. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_gates.py +0 -0
  609. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  610. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_gen_mock_index.py +0 -0
  611. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_generated_rust_fixture.py +0 -0
  612. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_generated_types_fixture.py +0 -0
  613. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_github_ops.py +0 -0
  614. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_github_throttle.py +0 -0
  615. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_goal.py +0 -0
  616. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_graph_health.py +0 -0
  617. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_graph_selfheal_absent_2237.py +0 -0
  618. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_handoff.py +0 -0
  619. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_checks.py +0 -0
  620. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_cli.py +0 -0
  621. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_cli_graph.py +0 -0
  622. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_config.py +0 -0
  623. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_context.py +0 -0
  624. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_coord_web_ci_pin.py +0 -0
  625. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_deploy_lane_facts.py +0 -0
  626. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_fix.py +0 -0
  627. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_incident_regression.py +0 -0
  628. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_issues_sync_staleness.py +0 -0
  629. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_pypi.py +0 -0
  630. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_registry.py +0 -0
  631. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_release_cordon_probe.py +0 -0
  632. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_timer_active.py +0 -0
  633. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_toolchain.py +0 -0
  634. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_unit_drift.py +0 -0
  635. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_health_unit_enablement.py +0 -0
  636. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_hooks.py +0 -0
  637. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_human_attended_437.py +0 -0
  638. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_init.py +0 -0
  639. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_install_agent_venv_2911.py +0 -0
  640. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_integration.py +0 -0
  641. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_briefing_echo.py +0 -0
  642. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_pane_log_2541.py +0 -0
  643. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_prefill_state.py +0 -0
  644. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_session_relaunch.py +0 -0
  645. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_test_verdict_backstop.py +0 -0
  646. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_token_attribution.py +0 -0
  647. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_interactive_worktree.py +0 -0
  648. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_issue_store_seam.py +0 -0
  649. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_issues_sync_status.py +0 -0
  650. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_liveness_auditor.py +0 -0
  651. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_liveness_notify.py +0 -0
  652. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_lock_contention_ratchet.py +0 -0
  653. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_machine_onboard.py +0 -0
  654. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_machine_pause.py +0 -0
  655. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_merge_queue.py +0 -0
  656. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_merge_verify.py +0 -0
  657. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_milestone_chat.py +0 -0
  658. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_milestone_dispatch.py +0 -0
  659. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_milestone_gate.py +0 -0
  660. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_milestone_order.py +0 -0
  661. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_milestone_seam.py +0 -0
  662. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_mock_author.py +0 -0
  663. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_model_tiering.py +0 -0
  664. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_models.py +0 -0
  665. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_models_config_labels.py +0 -0
  666. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_needs_attention.py +0 -0
  667. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_network.py +0 -0
  668. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_new_issue_chat.py +0 -0
  669. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_next_release_tag.py +0 -0
  670. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_node_shim.py +0 -0
  671. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_baseline.py +0 -0
  672. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_cli.py +0 -0
  673. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_collect.py +0 -0
  674. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_config.py +0 -0
  675. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_drive_seam.py +0 -0
  676. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_isolation.py +0 -0
  677. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_predicate.py +0 -0
  678. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_quiet_hours.py +0 -0
  679. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notifier_service.py +0 -0
  680. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notify.py +0 -0
  681. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_notify_drain.py +0 -0
  682. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_openapi.py +0 -0
  683. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_operational_defaults.py +0 -0
  684. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_overlap_fence.py +0 -0
  685. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_overlap_predict.py +0 -0
  686. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_packaged_deploy_units.py +0 -0
  687. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_parentage.py +0 -0
  688. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_paste_landed.py +0 -0
  689. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  690. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_pipeline.py +0 -0
  691. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_plan_followup_approve_plan_command.py +0 -0
  692. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_plan_followup_pr_command.py +0 -0
  693. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_plan_followup_review_command.py +0 -0
  694. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_plan_only.py +0 -0
  695. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_plan_parser.py +0 -0
  696. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_platform_paths.py +0 -0
  697. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_portal_bridge.py +0 -0
  698. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_portal_config.py +0 -0
  699. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_portal_store.py +0 -0
  700. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_portal_sync.py +0 -0
  701. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_pr_body_lint.py +0 -0
  702. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_prereqs.py +0 -0
  703. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_production_db_guard.py +0 -0
  704. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_progress.py +0 -0
  705. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_provider_seam.py +0 -0
  706. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_providers.py +0 -0
  707. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_providers_config_labels.py +0 -0
  708. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_providers_pty.py +0 -0
  709. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_quiet_hours.py +0 -0
  710. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_quiet_hours_store_2146.py +0 -0
  711. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reap_merged_sessions.py +0 -0
  712. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reap_stale_interactive_tick.py +0 -0
  713. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile.py +0 -0
  714. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_branch.py +0 -0
  715. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_completions.py +0 -0
  716. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  717. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_merges.py +0 -0
  718. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_no_agent_record.py +0 -0
  719. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_tick.py +0 -0
  720. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_reconcile_usage_limit_done.py +0 -0
  721. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_refine_chat.py +0 -0
  722. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_cordon_2101.py +0 -0
  723. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  724. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_cordon_deadlock_2240.py +0 -0
  725. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_cordon_stuck_2490.py +0 -0
  726. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_propagate.py +0 -0
  727. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_propagate_threshold.py +0 -0
  728. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_roll_between_legs_2854.py +0 -0
  729. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_roll_window_handoff.py +0 -0
  730. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_unified_1242.py +0 -0
  731. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_verify.py +0 -0
  732. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_release_window.py +0 -0
  733. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_remote_auto_prune.py +0 -0
  734. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_remote_interactive_reaper.py +0 -0
  735. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_repo_add.py +0 -0
  736. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_repo_edit_2220.py +0 -0
  737. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_repo_graph_fleet_2237.py +0 -0
  738. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_repo_onboard_2220.py +0 -0
  739. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_report_result_push.py +0 -0
  740. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_retry.py +0 -0
  741. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_retry_advisory_1606.py +0 -0
  742. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_retry_type_1636.py +0 -0
  743. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_revalidate.py +0 -0
  744. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review.py +0 -0
  745. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_end_review_without_verdict.py +0 -0
  746. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_parse_failure_diagnostic.py +0 -0
  747. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_reaffirm.py +0 -0
  748. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_state.py +0 -0
  749. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_verdict_backstop.py +0 -0
  750. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_verdict_override_audit.py +0 -0
  751. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_verdict_relay.py +0 -0
  752. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_review_zero_commits.py +0 -0
  753. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_scoped_review_wiring.py +0 -0
  754. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_scorecard.py +0 -0
  755. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_self_health.py +0 -0
  756. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_serve_app_board_trim.py +0 -0
  757. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_serve_rest_routes.py +0 -0
  758. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_session.py +0 -0
  759. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_slice_issue_attribution.py +0 -0
  760. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_smoke_live_checkout_restore.py +0 -0
  761. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_smoke_workflow.py +0 -0
  762. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_spend_ceiling.py +0 -0
  763. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_spend_ceiling_coordinator.py +0 -0
  764. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_split.py +0 -0
  765. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_split_work.py +0 -0
  766. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_sql_dialect.py +0 -0
  767. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_stage_projection.py +0 -0
  768. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_stale_busy_reviewer_697.py +0 -0
  769. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_stalled_pipeline.py +0 -0
  770. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_state_review_findings_daemon.py +0 -0
  771. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_status_fleet_footer.py +0 -0
  772. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_stop_1567.py +0 -0
  773. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_store_contract.py +0 -0
  774. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_store_migrate.py +0 -0
  775. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_stuck.py +0 -0
  776. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  777. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_terminal_command.py +0 -0
  778. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_test_author.py +0 -0
  779. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_test_chat.py +0 -0
  780. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_test_orchestrator.py +0 -0
  781. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_test_report.py +0 -0
  782. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_test_verdict_parsing.py +0 -0
  783. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_test_verdict_transcript_floor.py +0 -0
  784. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_text_io_encoding_audit.py +0 -0
  785. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_thin_client_board_audit.py +0 -0
  786. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_thin_client_config_load_1080.py +0 -0
  787. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_tmux_host.py +0 -0
  788. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_tmux_session.py +0 -0
  789. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_transcript_floor.py +0 -0
  790. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_usage.py +0 -0
  791. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_usage_limits.py +0 -0
  792. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_usage_rollup.py +0 -0
  793. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_venv_live_install_2121.py +0 -0
  794. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_version_single_source.py +0 -0
  795. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_watch.py +0 -0
  796. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  797. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worker_env_venv_isolation.py +0 -0
  798. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worker_events.py +0 -0
  799. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worker_image_pin_sync.py +0 -0
  800. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worker_safety.py +0 -0
  801. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worker_test_scoping.py +0 -0
  802. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worktree.py +0 -0
  803. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  804. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/test_write_parity.py +0 -0
  805. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tests/write_parity.py +0 -0
  806. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/.github/workflows/release-tui.yml +0 -0
  807. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/Cargo.lock +0 -0
  808. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/Cargo.toml +0 -0
  809. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/cargo-config-local-quadraui.toml.example +0 -0
  810. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/approved.rs +0 -0
  811. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/audit.rs +0 -0
  812. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/chat.rs +0 -0
  813. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/dialogs.rs +0 -0
  814. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/doc_tabs.rs +0 -0
  815. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/drive.rs +0 -0
  816. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/drive_queue.rs +0 -0
  817. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/escalation.rs +0 -0
  818. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/events.rs +0 -0
  819. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/fixtures.rs +0 -0
  820. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/fleet_health.rs +0 -0
  821. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/fleet_sessions.rs +0 -0
  822. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/fleet_terminals.rs +0 -0
  823. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/format.rs +0 -0
  824. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/milestone_dag.rs +0 -0
  825. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/mod.rs +0 -0
  826. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/msv.rs +0 -0
  827. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/pipeline.rs +0 -0
  828. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/plans.rs +0 -0
  829. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/render.rs +0 -0
  830. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/reports.rs +0 -0
  831. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/sessions.rs +0 -0
  832. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/settings_ui.rs +0 -0
  833. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/sidebar.rs +0 -0
  834. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/terminal.rs +0 -0
  835. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/tests.rs +0 -0
  836. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/types/generated.rs +0 -0
  837. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/types.rs +0 -0
  838. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/app/workspace.rs +0 -0
  839. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/bin/gtk.rs +0 -0
  840. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/commands.rs +0 -0
  841. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/lib.rs +0 -0
  842. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/main.rs +0 -0
  843. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/src/settings.rs +0 -0
  844. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/audit_1039.rs +0 -0
  845. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/contract.md +0 -0
  846. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/manifest.yml +0 -0
  847. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  848. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  849. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  850. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  851. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/contract.md +0 -0
  852. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/manifest.yml +0 -0
  853. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  854. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  855. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  856. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  857. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  858. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  859. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  860. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  861. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  862. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  863. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  864. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  865. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  866. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/contract.md +0 -0
  867. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  868. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/manifest.yml +0 -0
  869. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  870. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  871. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  872. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  873. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  874. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  875. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  876. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  877. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  878. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  879. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  880. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  881. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/contract.md +0 -0
  882. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  883. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/manifest.yml +0 -0
  884. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  885. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  886. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  887. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  888. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  889. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  890. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/acceptance.rs +0 -0
  891. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/cli.rs +0 -0
  892. {code_coordinator-0.5.291 → code_coordinator-0.5.293}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.291
3
+ Version: 0.5.293
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.291
3
+ Version: 0.5.293
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
@@ -64,6 +64,7 @@ coord/dead_end.py
64
64
  coord/decomposition_chat.py
65
65
  coord/deploy_manifest.py
66
66
  coord/deploy_units.py
67
+ coord/deprecation_telemetry.py
67
68
  coord/deps.py
68
69
  coord/diagnose.py
69
70
  coord/dispatch.py
@@ -488,6 +489,7 @@ tests/test_cli_track.py
488
489
  tests/test_cli_tui_update.py
489
490
  tests/test_cli_wait.py
490
491
  tests/test_client_base_install.py
492
+ tests/test_client_resource_migration_1946.py
491
493
  tests/test_commands_common.py
492
494
  tests/test_comments.py
493
495
  tests/test_completion_summary.py
@@ -527,6 +529,7 @@ tests/test_deploy_manifest.py
527
529
  tests/test_deploy_notify_unit.py
528
530
  tests/test_deploy_units_lane.py
529
531
  tests/test_deploy_web_unit.py
532
+ tests/test_deprecation_telemetry.py
530
533
  tests/test_deps.py
531
534
  tests/test_diagnose.py
532
535
  tests/test_dispatch.py
@@ -116,6 +116,7 @@
116
116
  "coord/deploy/coord-web.service",
117
117
  "coord/deploy_manifest.py",
118
118
  "coord/deploy_units.py",
119
+ "coord/deprecation_telemetry.py",
119
120
  "coord/deps.py",
120
121
  "coord/diagnose.py",
121
122
  "coord/dispatch.py",
@@ -514,6 +515,7 @@
514
515
  "tests/test_cli_tui_update.py",
515
516
  "tests/test_cli_wait.py",
516
517
  "tests/test_client_base_install.py",
518
+ "tests/test_client_resource_migration_1946.py",
517
519
  "tests/test_commands_common.py",
518
520
  "tests/test_comments.py",
519
521
  "tests/test_completion_summary.py",
@@ -553,6 +555,7 @@
553
555
  "tests/test_deploy_notify_unit.py",
554
556
  "tests/test_deploy_units_lane.py",
555
557
  "tests/test_deploy_web_unit.py",
558
+ "tests/test_deprecation_telemetry.py",
556
559
  "tests/test_deps.py",
557
560
  "tests/test_diagnose.py",
558
561
  "tests/test_dispatch.py",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.291",
2
+ "tag": "0.5.293",
3
3
  "distance": 0,
4
- "node": "g408957bf4d2de2370d4e9df055a80c1680a697a2",
4
+ "node": "g80ec18827638d21151ef2fd58d9374377758ba0b",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-29"
@@ -0,0 +1,342 @@
1
+ """``BoardService`` facade (#749): decide local-vs-daemon ONCE, for both reads
2
+ and writes, instead of re-implementing the ``resolve_board_service()`` +
3
+ local-fallback dance at every call site.
4
+
5
+ Before this module, ~30 call sites across ``coord/commands/*.py``,
6
+ ``coord/dashboard/server.py`` and ``coord/auto_loop.py`` each hand-rolled:
7
+
8
+ svc = resolve_board_service()
9
+ board = fetch_remote_board(svc) if svc else (load_board() or build_board())
10
+ ...mutate board...
11
+ save_board(board) # silently a no-op on a thin client — the #749 bug
12
+
13
+ ``read_board()`` / ``write_board()`` below are the one place that decision is
14
+ made. ``write_board()`` POSTs to the daemon's generic ``/board`` upsert
15
+ endpoint when ``board_service`` is configured, so a thin client's mutation
16
+ actually reaches the shared DB instead of vanishing into an empty local one.
17
+
18
+ This module also hosts ``route_write()``, which centralizes the
19
+ ``resolve_board_service()`` + ``coord.client.post_record`` dance duplicated
20
+ ~13x across ``coord.state``'s per-mutation routing wrappers
21
+ (``record_dispatched``, ``record_test_verdict``, ``update_issue_labels``,
22
+ …) — so ``coord.state`` depends on this thin facade rather than importing
23
+ ``coord.client`` directly at over a dozen sites (#749's "reduce state.py's
24
+ outward coupling toward a pure DAO").
25
+
26
+ Whole-command re-routing (``coord merge``, ``coord reconcile-merges``,
27
+ ``coord diagnose``, ``coord housekeeping`` — where the ENTIRE command runs on
28
+ the daemon and streams back its own textual/structured output, rather than a
29
+ generic board upsert) is a different shape and stays in its own commands;
30
+ ``daemon_reroute_target()`` here only DRYs up the repeated
31
+ "resolve + check the re-entrancy env guard" preamble those four call sites
32
+ share.
33
+ """
34
+
35
+ from __future__ import annotations
36
+
37
+ import logging
38
+ import os
39
+
40
+ from coord.models import Board
41
+
42
+ _log = logging.getLogger(__name__)
43
+
44
+
45
+ def resolve(): # -> coord.client.ServiceConfig | None
46
+ """Resolve the configured board service, or ``None`` for local/host mode."""
47
+ from coord.client import resolve_board_service # noqa: PLC0415
48
+
49
+ return resolve_board_service()
50
+
51
+
52
+ def is_remote() -> bool:
53
+ """Whether this process is a thin client (``board_service`` configured)."""
54
+ return resolve() is not None
55
+
56
+
57
+ def read_board() -> Board:
58
+ """Return the current board.
59
+
60
+ Daemon-configured → GET /board and reconstruct it. Otherwise → the local
61
+ DB (``load_board()``, falling back to ``build_board()`` when the board has
62
+ never been saved). This is the single place that decision is made; every
63
+ call site that used to duplicate
64
+ ``fetch_remote_board(svc) if svc else (load_board() or build_board())``
65
+ should call this instead.
66
+ """
67
+ svc = resolve()
68
+ if svc is not None:
69
+ from coord.client import fetch_remote_board # noqa: PLC0415
70
+
71
+ return fetch_remote_board(svc)
72
+ from coord.state import build_board, load_board # noqa: PLC0415
73
+
74
+ return load_board() or build_board()
75
+
76
+
77
+ def write_board(board: Board) -> None:
78
+ """Persist *board*.
79
+
80
+ Daemon-configured → POST the full board to the daemon's ``/board`` upsert
81
+ endpoint (safe: upsert-only, never deletes — see
82
+ ``coord.client.serialize_board``). Otherwise → the local
83
+ ``coord.state.save_board``. Every call site that used to call
84
+ ``save_board(board)`` directly (and silently no-op on a thin client)
85
+ should call this instead.
86
+ """
87
+ svc = resolve()
88
+ if svc is not None:
89
+ from coord.client import post_board # noqa: PLC0415
90
+
91
+ post_board(svc, board)
92
+ return
93
+ from coord.state import save_board # noqa: PLC0415
94
+
95
+ save_board(board)
96
+
97
+
98
+ def route_write(
99
+ svc,
100
+ endpoint: str,
101
+ payload: dict,
102
+ *,
103
+ timeout: float | None = None,
104
+ ) -> dict | None:
105
+ """POST *payload* to *endpoint* via *svc*, or ``None`` if *svc* is unset.
106
+
107
+ Centralizes the ``from coord.client import post_record`` + call dance
108
+ duplicated across ``coord.state``'s ``record_*`` / ``update_*`` routing
109
+ wrappers, so ``coord.state`` no longer needs its own deferred
110
+ ``coord.client`` import at each of those ~13 sites. Callers keep their own
111
+ ``svc = board_service.resolve()`` (they need the value regardless, to
112
+ decide whether to fall through to the local ``_*_local`` path) — this just
113
+ does the "POST it, or tell the caller there's nothing to POST to" part.
114
+
115
+ Returns ``None`` when *svc* is ``None`` (caller should run the local
116
+ path); otherwise returns the daemon's JSON response (never ``None``,
117
+ even for an empty ``{}`` body) so callers can distinguish "routed" from
118
+ "not routed" with a plain ``is not None`` check.
119
+ """
120
+ if svc is None:
121
+ return None
122
+ from coord.client import post_record # noqa: PLC0415
123
+
124
+ if timeout is None:
125
+ return post_record(svc, endpoint, payload)
126
+ return post_record(svc, endpoint, payload, timeout=timeout)
127
+
128
+
129
+ # ── #1946: resource routes first, RPC only as a deploy-lag fallback ──────────
130
+
131
+ #: Memo of which daemons have the #1944 resource routes, keyed by
132
+ #: ``(service url, route id)``. ``False`` means a resource route on that
133
+ #: daemon answered 404/405 — it predates #1944 — so subsequent calls in this
134
+ #: process go straight to the RPC route instead of paying a doomed round trip
135
+ #: every single time. Keyed per *route id* rather than per daemon so one
136
+ #: family degrading (e.g. an unusual repo name that Starlette's ``{repo_name}``
137
+ #: path converter cannot match) never silently un-migrates the others.
138
+ #:
139
+ #: Process-local and never persisted: a daemon restarted onto a newer release
140
+ #: is picked up by the next ``coord`` invocation, which is the same lifetime
141
+ #: every other client-side cache here has.
142
+ _RESOURCE_ROUTE_SUPPORT: dict[tuple[str, str], bool] = {}
143
+
144
+
145
+ def reset_resource_route_support() -> None:
146
+ """Forget which daemons support the #1944 resource routes (tests)."""
147
+ _RESOURCE_ROUTE_SUPPORT.clear()
148
+
149
+
150
+ def route_resource_write(
151
+ svc,
152
+ *,
153
+ route_id: str,
154
+ method: str,
155
+ path: str,
156
+ payload: dict,
157
+ rpc_endpoint: str,
158
+ rpc_payload: dict,
159
+ timeout: float | None = None,
160
+ ) -> dict | None:
161
+ """Write via the #1944 resource route, falling back to the RPC one.
162
+
163
+ The #1946 migration seam. Same contract as :func:`route_write` — ``None``
164
+ when *svc* is unset (the caller runs its local path), otherwise the
165
+ daemon's JSON response — so flipping a ``coord.state`` wrapper from one to
166
+ the other changes nothing else about that wrapper.
167
+
168
+ **Why there is a fallback at all.** ``docs/STORE_SERVICE.md`` names the
169
+ hazard this closes: *"the 405 trap where a new client meets an old
170
+ daemon."* Deploying server-first is the primary defence, but it is a
171
+ procedure, and ``coord serve`` is a long-running process — an operator who
172
+ pulls this commit into an editable checkout has a new client talking to a
173
+ daemon still running the old code until it is restarted. Without this,
174
+ every ``coord ready`` / ``coord close`` / label write in that window is a
175
+ hard 405. With it, they keep working and the #1945 deprecated-route
176
+ telemetry records the RPC hits — which is exactly the honest signal that
177
+ the lane is stale, rather than an outage.
178
+
179
+ A 404/405 is read as "this daemon predates #1944" and never as "the request
180
+ was malformed": all three resource handlers answer 400/409/422/503 with an
181
+ ``error`` body for bad input, and none of them 404 for the payloads this
182
+ package sends (``PATCH /assignment/{id}`` deliberately does not even 404 on
183
+ an unknown id). Every other status — and every transport error — is
184
+ re-raised unchanged, so callers that already special-case an HTTP failure
185
+ (``close_issue``'s 409, the fail-open session-id/failure-reason writes)
186
+ keep behaving identically.
187
+ """
188
+ if svc is None:
189
+ return None
190
+ import httpx # noqa: PLC0415
191
+
192
+ from coord.client import post_record, request_resource # noqa: PLC0415
193
+
194
+ key = (svc.url, route_id)
195
+ kwargs = {} if timeout is None else {"timeout": timeout}
196
+ if _RESOURCE_ROUTE_SUPPORT.get(key) is not False:
197
+ try:
198
+ result = request_resource(svc, method, path, payload, **kwargs)
199
+ except httpx.HTTPStatusError as exc:
200
+ if exc.response.status_code not in (404, 405):
201
+ raise
202
+ if _RESOURCE_ROUTE_SUPPORT.get(key) is None:
203
+ _log.warning(
204
+ "#1946: %s %s answered %s on %s — that daemon predates the "
205
+ "#1944 resource routes; falling back to %s for the rest of "
206
+ "this process. Deploy the daemon (server-first) to migrate.",
207
+ method, path, exc.response.status_code, svc.url, rpc_endpoint,
208
+ )
209
+ _RESOURCE_ROUTE_SUPPORT[key] = False
210
+ else:
211
+ _RESOURCE_ROUTE_SUPPORT[key] = True
212
+ return result
213
+ return post_record(svc, rpc_endpoint, rpc_payload, **kwargs)
214
+
215
+
216
+ def resource_addressable(segment: str) -> bool:
217
+ """Whether *segment* can be a path parameter on the #1944 resource routes.
218
+
219
+ Starlette's default converter does not match ``/``, so a repo identified
220
+ by an ``owner/repo`` **slug** cannot be addressed as
221
+ ``/issue/{repo_name}/{number}`` at all — the slash silently shifts the
222
+ slug's second half into ``{number}``, which the handler rejects as a 404.
223
+
224
+ Almost every seam caller passes ``coordinator.yml``'s short ``name:``
225
+ (a bare identifier) and keeps the slug in a separate ``repo_github``
226
+ field. The exception is ``coord.state.record_issue_comment_capture``,
227
+ reached from ``github_ops.post_issue_comment``, which stores the ``gh
228
+ --repo`` slug as its ``repo_name`` — the ``issue_comments`` table is keyed
229
+ that way while the ``issues`` table is keyed on the short name.
230
+
231
+ Rather than pay a doomed round trip (and, worse, memoize its 404 as "this
232
+ daemon predates #1944" and un-migrate every *other* issue write in the
233
+ process), those calls go straight to the RPC route. This is a genuine
234
+ gap in #1944's resource shape, not a deploy-lag fallback: it is why
235
+ ``/issue-comments`` will still show non-zero telemetry after this
236
+ migration, and #1947 must not read that as "a client failed to migrate".
237
+ """
238
+ return "/" not in str(segment)
239
+
240
+
241
+ def route_issue_patch(
242
+ svc,
243
+ repo_name: str,
244
+ issue_number: int,
245
+ patch: dict,
246
+ *,
247
+ rpc_endpoint: str,
248
+ rpc_payload: dict,
249
+ timeout: float | None = None,
250
+ ) -> dict | None:
251
+ """``PATCH /issue/{repo}/{n}``, falling back to *rpc_endpoint* (#1946)."""
252
+ if not resource_addressable(repo_name):
253
+ return route_write(svc, rpc_endpoint, rpc_payload, timeout=timeout)
254
+ return route_resource_write(
255
+ svc,
256
+ route_id="PATCH /issue",
257
+ method="PATCH",
258
+ path=f"/issue/{repo_name}/{issue_number}",
259
+ payload=patch,
260
+ rpc_endpoint=rpc_endpoint,
261
+ rpc_payload=rpc_payload,
262
+ timeout=timeout,
263
+ )
264
+
265
+
266
+ def route_issue_comment(
267
+ svc,
268
+ repo_name: str,
269
+ issue_number: int,
270
+ payload: dict,
271
+ *,
272
+ rpc_endpoint: str,
273
+ rpc_payload: dict,
274
+ timeout: float | None = None,
275
+ ) -> dict | None:
276
+ """``POST /issue/{repo}/{n}/comments``, falling back to *rpc_endpoint* (#1946).
277
+
278
+ See :func:`resource_addressable` for why an ``owner/repo``-slugged
279
+ *repo_name* stays on the RPC route.
280
+ """
281
+ if not resource_addressable(repo_name):
282
+ return route_write(svc, rpc_endpoint, rpc_payload, timeout=timeout)
283
+ return route_resource_write(
284
+ svc,
285
+ route_id="POST /issue/comments",
286
+ method="POST",
287
+ path=f"/issue/{repo_name}/{issue_number}/comments",
288
+ payload=payload,
289
+ rpc_endpoint=rpc_endpoint,
290
+ rpc_payload=rpc_payload,
291
+ timeout=timeout,
292
+ )
293
+
294
+
295
+ def route_assignment_patch(
296
+ svc,
297
+ assignment_id: str,
298
+ patch: dict,
299
+ *,
300
+ rpc_endpoint: str,
301
+ rpc_payload: dict | None = None,
302
+ timeout: float | None = None,
303
+ ) -> dict | None:
304
+ """``PATCH /assignment/{id}``, falling back to *rpc_endpoint* (#1946).
305
+
306
+ *rpc_payload* defaults to *patch* plus ``assignment_id`` — the shape every
307
+ ``/assignment-usage`` caller already sent — so the field-setter call sites
308
+ that need no key renaming do not each restate it. ``failure_reason`` is
309
+ the one that does: the RPC route still calls that field ``reason``.
310
+ """
311
+ if rpc_payload is None:
312
+ rpc_payload = {"assignment_id": assignment_id, **patch}
313
+ if not resource_addressable(assignment_id):
314
+ return route_write(svc, rpc_endpoint, rpc_payload, timeout=timeout)
315
+ return route_resource_write(
316
+ svc,
317
+ route_id="PATCH /assignment",
318
+ method="PATCH",
319
+ path=f"/assignment/{assignment_id}",
320
+ payload=patch,
321
+ rpc_endpoint=rpc_endpoint,
322
+ rpc_payload=rpc_payload,
323
+ timeout=timeout,
324
+ )
325
+
326
+
327
+ def daemon_reroute_target(env_var: str): # -> coord.client.ServiceConfig | None
328
+ """Resolve the board service for a whole-command daemon re-route, or
329
+ ``None`` if the command should run locally.
330
+
331
+ Shared preamble for the four commands (``merge``, ``reconcile-merges``,
332
+ ``diagnose``, ``housekeeping``) that route their ENTIRE execution to the
333
+ daemon rather than doing a generic board upsert: each sets *env_var*
334
+ (e.g. ``COORD_MERGE_ON_DAEMON``) before re-invoking itself on the daemon
335
+ side, so the daemon's own execution doesn't try to re-route back out over
336
+ HTTP. Returns ``None`` (meaning "run locally") both when no board service
337
+ is configured AND when *env_var* is set (i.e. we ARE the daemon running
338
+ the re-routed-to invocation).
339
+ """
340
+ if os.environ.get(env_var):
341
+ return None
342
+ return resolve()
@@ -27,6 +27,7 @@ from typing import Any
27
27
 
28
28
  import httpx
29
29
 
30
+ from coord import __version__
30
31
  from coord._board_mapping import assemble_board, infer_review_state
31
32
  from coord.models import Board
32
33
 
@@ -69,7 +70,20 @@ def resolve_board_service(
69
70
 
70
71
 
71
72
  def _headers(svc: ServiceConfig) -> dict[str, str]:
72
- return {"Authorization": f"Bearer {svc.token}"} if svc.token else {}
73
+ # #1945: every request identifies itself as this package + its running
74
+ # version, whether it's the interactive `coord` CLI, an agent's own
75
+ # pinned `~/.coord-venv`, or the drive-queue runner -- all three are
76
+ # literally this same Python package, just invoked from a different
77
+ # entry point, so there is no finer-grained identity to report short of
78
+ # a caller passing one explicitly (none does today). This is what lets
79
+ # the daemon's deprecated-RPC-route telemetry (coord.deprecation_telemetry)
80
+ # name which client + version is still calling a route marked deprecated
81
+ # in the OpenAPI spec, instead of an unattributed hit that nobody can
82
+ # act on.
83
+ headers = {"X-Coord-Client": "coord-py", "X-Coord-Client-Version": __version__}
84
+ if svc.token:
85
+ headers["Authorization"] = f"Bearer {svc.token}"
86
+ return headers
73
87
 
74
88
 
75
89
  def fetch_board_payload(svc: ServiceConfig, *, timeout: float = _DEFAULT_TIMEOUT) -> dict:
@@ -207,6 +221,110 @@ def post_record(
207
221
  return resp.json()
208
222
 
209
223
 
224
+ # ── #1946: the resource-shaped routes (#1944) this client now prefers ────────
225
+ #
226
+ # `post_record` above is the RPC verb-per-endpoint transport; the three
227
+ # functions below are its resource-shaped counterparts. They are deliberately
228
+ # *thin* -- no fallback logic lives here, because "which route do I call" is a
229
+ # routing decision and belongs next to `coord.board_service.route_write`, not
230
+ # in the transport. See `coord.board_service.route_resource_write`.
231
+
232
+
233
+ def request_resource(
234
+ svc: ServiceConfig,
235
+ method: str,
236
+ path: str,
237
+ payload: dict | None = None,
238
+ *,
239
+ timeout: float = _WRITE_TIMEOUT,
240
+ ) -> dict:
241
+ """Issue *method* against a resource-shaped route and return the JSON body.
242
+
243
+ The generic transport behind :func:`patch_issue`, :func:`patch_assignment`
244
+ and :func:`post_issue_comment`. Same contract as :func:`post_record`:
245
+ raises ``httpx.HTTPError`` on transport/HTTP failure, and the caller
246
+ decides whether that is fatal. In particular a **404 or 405** here means
247
+ "this daemon predates #1944" (the RPC-only shape) rather than "your
248
+ request was wrong" -- every resource handler either succeeds or answers
249
+ 4xx/503 with an ``error`` body, and none of them 404 for the inputs this
250
+ package sends. ``coord.board_service.route_resource_write`` is what turns
251
+ that into a fallback.
252
+ """
253
+ resp = httpx.request(
254
+ method,
255
+ f"{svc.url}{path}",
256
+ json=payload,
257
+ headers=_headers(svc),
258
+ timeout=timeout,
259
+ )
260
+ resp.raise_for_status()
261
+ return resp.json()
262
+
263
+
264
+ def patch_issue(
265
+ svc: ServiceConfig,
266
+ repo_name: str,
267
+ number: int,
268
+ patch: dict,
269
+ *,
270
+ timeout: float = _WRITE_TIMEOUT,
271
+ ) -> dict:
272
+ """``PATCH /issue/{repo_name}/{number}`` → the ``IssuePatchResult`` body.
273
+
274
+ The resource-shaped replacement for ``/issue-edit``, ``/issue-label``,
275
+ ``/issue-labels``, ``/issue-milestone``, ``/issue-milestone-remove``,
276
+ ``/issue-close`` and ``/issue-reopen``. *patch* is the raw partial body
277
+ (see :class:`coord.rest_schema.IssuePatch`); **absent is not null**, so
278
+ only send the keys you actually mean to change -- an explicit
279
+ ``"milestone": None`` clears the milestone, while omitting the key leaves
280
+ it alone.
281
+ """
282
+ return request_resource(
283
+ svc, "PATCH", f"/issue/{repo_name}/{number}", patch, timeout=timeout
284
+ )
285
+
286
+
287
+ def post_issue_comment(
288
+ svc: ServiceConfig,
289
+ repo_name: str,
290
+ number: int,
291
+ payload: dict,
292
+ *,
293
+ timeout: float = _WRITE_TIMEOUT,
294
+ ) -> dict:
295
+ """``POST /issue/{repo_name}/{number}/comments`` → ``IssueCommentResult``.
296
+
297
+ The resource-shaped replacement for ``/issue-comment`` (``action="post"``)
298
+ and ``/issue-comments`` (``action="capture"`` / ``"sync"``).
299
+ """
300
+ return request_resource(
301
+ svc,
302
+ "POST",
303
+ f"/issue/{repo_name}/{number}/comments",
304
+ payload,
305
+ timeout=timeout,
306
+ )
307
+
308
+
309
+ def patch_assignment(
310
+ svc: ServiceConfig,
311
+ assignment_id: str,
312
+ patch: dict,
313
+ *,
314
+ timeout: float = _WRITE_TIMEOUT,
315
+ ) -> dict:
316
+ """``PATCH /assignment/{assignment_id}`` → the ``AssignmentPatchResult`` body.
317
+
318
+ The resource-shaped replacement for ``/assignment-usage``,
319
+ ``/assignment-session-id`` and ``/assignment-failure-reason``. Like those
320
+ three, an unknown *assignment_id* is **not** a 404 — the UPDATE simply
321
+ matches no rows.
322
+ """
323
+ return request_resource(
324
+ svc, "PATCH", f"/assignment/{assignment_id}", patch, timeout=timeout
325
+ )
326
+
327
+
210
328
  def fetch_paused_machines(
211
329
  svc: ServiceConfig, *, timeout: float = _DEFAULT_TIMEOUT
212
330
  ) -> set[str]:
@@ -0,0 +1,102 @@
1
+ """Deprecation-call telemetry for RPC routes (#1945, Phase B of milestone #60).
2
+
3
+ #1944 stamped ``deprecated: true`` on every RPC route a resource-shaped
4
+ route now supersedes (``coord.serve_app.RPC_SUPERSEDED_BY_RESOURCE``) — but
5
+ that is a documentation signal only. Nobody can safely retire one of those
6
+ routes on "we think everyone upgraded": this repo has already found a
7
+ `coord-serve` unit 591 hours stale and a pinned CLI three releases behind
8
+ while driving. Retirement needs a number, not a belief.
9
+
10
+ This module is the write side of that number: :func:`record_deprecated_rpc_call`
11
+ is the single choke point the daemon's ``_DeprecatedRouteTelemetryMiddleware``
12
+ (``coord/serve_app.py``) calls on every request whose path is a deprecated
13
+ RPC route, best-effort and after the fact — capture must never raise into,
14
+ or delay, the request that triggered it. The read side (per-route last
15
+ call / calling clients / versions) is ``coord.reports``' ``deprecated-routes``
16
+ report, folded over the audit rows this writes.
17
+
18
+ Client identity travels over two request headers a calling client sets
19
+ (:data:`CLIENT_HEADER` / :data:`CLIENT_VERSION_HEADER`); a client that
20
+ predates this issue sends neither, and that is recorded as
21
+ :data:`UNKNOWN_CLIENT` rather than dropped — an unattributed call must still
22
+ count against retirement (#1945 acceptance), not vanish from the count.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import logging
28
+
29
+ _log = logging.getLogger(__name__)
30
+
31
+ __all__ = [
32
+ "CATEGORY",
33
+ "EVENT_TYPE",
34
+ "CLIENT_HEADER",
35
+ "CLIENT_VERSION_HEADER",
36
+ "UNKNOWN_CLIENT",
37
+ "record_deprecated_rpc_call",
38
+ ]
39
+
40
+ # `coord.audit.query_audit_log(category=...)` filter value — also the value
41
+ # `coord.reports.fold_deprecated_routes` filters on when reading these rows
42
+ # back out. One literal, shared by both ends via this module.
43
+ CATEGORY = "deprecation"
44
+ EVENT_TYPE = "deprecated_rpc_call"
45
+
46
+ # Header names a calling client sets its identity/version on. Starlette's
47
+ # `Request.headers` is case-insensitive, so the exact case here is cosmetic
48
+ # (chosen to match the existing `X-Coord-Schema` convention, #1943).
49
+ CLIENT_HEADER = "X-Coord-Client"
50
+ CLIENT_VERSION_HEADER = "X-Coord-Client-Version"
51
+
52
+ # What an absent/blank client identity or version is recorded as. Never
53
+ # dropped — an unattributed caller is exactly the caller retirement needs to
54
+ # know about most.
55
+ UNKNOWN_CLIENT = "unknown"
56
+
57
+
58
+ def _clean(value: str | None) -> str:
59
+ return (value or "").strip() or UNKNOWN_CLIENT
60
+
61
+
62
+ def record_deprecated_rpc_call(
63
+ route: str,
64
+ *,
65
+ client: str | None,
66
+ client_version: str | None,
67
+ ts: float | None = None,
68
+ ) -> None:
69
+ """Best-effort record of one call to deprecated RPC *route*.
70
+
71
+ Wraps :func:`coord.audit.record_audit` — itself already best-effort and
72
+ non-raising — in its own ``try/except`` so a broken import, a bad
73
+ argument type from a caller, or a DB error can never turn this
74
+ observability hook into a failed or delayed request. This is the ONLY
75
+ posture that satisfies #1945's "must never raise or delay a request":
76
+ the caller (the daemon's request-handling middleware) gets control back
77
+ unconditionally, whether or not the write actually landed.
78
+
79
+ ``client``/``client_version`` missing or blank are recorded as the
80
+ literal string :data:`UNKNOWN_CLIENT` — never dropped, per #1945's
81
+ acceptance bar ("an unattributed call must still block retirement").
82
+ """
83
+ try:
84
+ from coord.audit import record_audit # noqa: PLC0415
85
+
86
+ actor = _clean(client)
87
+ version = _clean(client_version)
88
+ record_audit(
89
+ tier="operational",
90
+ category=CATEGORY,
91
+ event_type=EVENT_TYPE,
92
+ actor=actor,
93
+ summary=f"deprecated RPC call: {route} (client={actor}@{version})",
94
+ ts=ts,
95
+ details={"route": route, "client": actor, "client_version": version},
96
+ )
97
+ except Exception: # noqa: BLE001 — telemetry must never break the caller
98
+ _log.debug(
99
+ "record_deprecated_rpc_call: best-effort write failed for %s",
100
+ route,
101
+ exc_info=True,
102
+ )