code-coordinator 0.5.272__tar.gz → 0.5.273__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 (877) hide show
  1. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/test.yml +58 -0
  2. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/PKG-INFO +3 -1
  3. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/PKG-INFO +3 -1
  4. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/requires.txt +3 -0
  5. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/scm_version.json +2 -2
  6. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/sql.py +58 -18
  7. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/pyproject.toml +11 -0
  8. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/backends.py +8 -10
  9. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_sql_dialect.py +231 -17
  10. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_sqlite_connect_ratchet.py +25 -4
  11. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/cargo-test.yml +0 -0
  22. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.github/workflows/release-tui.yml +0 -0
  24. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/.gitignore +0 -0
  25. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/GOAL.md +0 -0
  27. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/LICENSE +0 -0
  28. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/README.md +0 -0
  30. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/approved_work.py +0 -0
  46. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/audit.py +0 -0
  47. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/auto_loop.py +0 -0
  48. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/block_log.py +0 -0
  49. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_bool_guard.py +0 -0
  50. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/client.py +0 -0
  64. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/drive_queue.py +0 -0
  74. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/pr.py +0 -0
  84. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/config.py +0 -0
  97. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/confirm_test.py +0 -0
  99. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/conflict_fix.py +0 -0
  100. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/index.html +0 -0
  104. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/server.py +0 -0
  105. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dashboard/terminal.py +0 -0
  106. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/db.py +0 -0
  107. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dead_end.py +0 -0
  108. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/decomposition_chat.py +0 -0
  109. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-failure-notify.service +0 -0
  117. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-fleet-watchdog.service +0 -0
  118. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  119. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-notify.service +0 -0
  120. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-notify.timer +0 -0
  121. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-propagate.service +0 -0
  122. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-propagate.timer +0 -0
  123. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-window.service +0 -0
  124. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-release-window.timer +0 -0
  125. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-serve.service +0 -0
  126. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-web-dist-build.service +0 -0
  127. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-web-dist-build.timer +0 -0
  128. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy/coord-web.service +0 -0
  129. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy_manifest.py +0 -0
  130. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deploy_units.py +0 -0
  131. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/deps.py +0 -0
  132. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/diagnose.py +0 -0
  133. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dispatch.py +0 -0
  134. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/dist_name.py +0 -0
  135. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/drive.py +0 -0
  136. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/drive_queue.py +0 -0
  137. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/drive_state.py +0 -0
  138. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/events.py +0 -0
  139. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/failure_class.py +0 -0
  140. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/filelock.py +0 -0
  141. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/fleet_config_health.py +0 -0
  142. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/forge_availability.py +0 -0
  143. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/freshness.py +0 -0
  144. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gate_a.py +0 -0
  145. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gate_b.py +0 -0
  146. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gate_snapshot.py +0 -0
  147. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/gates.py +0 -0
  148. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/github_ops.py +0 -0
  149. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/github_throttle.py +0 -0
  150. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/goal.py +0 -0
  151. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/graph_health.py +0 -0
  152. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/__init__.py +0 -0
  153. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/aggregate.py +0 -0
  154. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/__init__.py +0 -0
  155. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/agent_install.py +0 -0
  156. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/cargo_targets.py +0 -0
  157. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/claude_binary.py +0 -0
  158. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/coord_web_ci_pin.py +0 -0
  159. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/deploy_lane_facts.py +0 -0
  160. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/disk.py +0 -0
  161. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_board.py +0 -0
  162. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  163. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_phantom.py +0 -0
  164. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/fleet_unit_drift.py +0 -0
  165. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/graph.py +0 -0
  166. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/graphify_cli.py +0 -0
  167. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/index_lock.py +0 -0
  168. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/issues_sync_staleness.py +0 -0
  169. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/plan_usage.py +0 -0
  170. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/release_cordon.py +0 -0
  171. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/repo_state.py +0 -0
  172. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/spawned_coord.py +0 -0
  173. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/stalled_pipeline.py +0 -0
  174. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/timer_active.py +0 -0
  175. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/toolchain.py +0 -0
  176. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/unit_drift.py +0 -0
  177. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/unit_enablement.py +0 -0
  178. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/checks/worktrees.py +0 -0
  179. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/cli.py +0 -0
  180. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/context.py +0 -0
  181. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/fleet_snapshot.py +0 -0
  182. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/models.py +0 -0
  183. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/pypi.py +0 -0
  184. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/registry.py +0 -0
  185. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/render.py +0 -0
  186. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/health/units.py +0 -0
  187. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/hooks.py +0 -0
  188. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/housekeeping.py +0 -0
  189. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/interactive.py +0 -0
  190. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/issue_store.py +0 -0
  191. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/issues_sync_status.py +0 -0
  192. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/liveness_auditor.py +0 -0
  193. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/machine_pause.py +0 -0
  194. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/merge_queue.py +0 -0
  195. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_chat.py +0 -0
  196. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_dispatch.py +0 -0
  197. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_gate.py +0 -0
  198. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/milestone_order.py +0 -0
  199. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/mock_author.py +0 -0
  200. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/models.py +0 -0
  201. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/network.py +0 -0
  202. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/new_issue_chat.py +0 -0
  203. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/__init__.py +0 -0
  204. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/baseline.py +0 -0
  205. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/cli.py +0 -0
  206. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/collect.py +0 -0
  207. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/digest.py +0 -0
  208. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/models.py +0 -0
  209. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/predicate.py +0 -0
  210. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/service.py +0 -0
  211. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/store.py +0 -0
  212. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notifier/transport.py +0 -0
  213. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/notify.py +0 -0
  214. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/openapi.py +0 -0
  215. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/overlap_fence.py +0 -0
  216. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/overlap_predict.py +0 -0
  217. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/parentage.py +0 -0
  218. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/parentage_github.py +0 -0
  219. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/pipeline.py +0 -0
  220. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/plan_parser.py +0 -0
  221. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/plans.py +0 -0
  222. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/platform_paths.py +0 -0
  223. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/portal_bridge.py +0 -0
  224. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/portal_store.py +0 -0
  225. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/portal_sync.py +0 -0
  226. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/pr_body_lint.py +0 -0
  227. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/prereqs.py +0 -0
  228. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/progress.py +0 -0
  229. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/__init__.py +0 -0
  230. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/base.py +0 -0
  231. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/claude.py +0 -0
  232. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/claude_pty.py +0 -0
  233. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/providers/opencode.py +0 -0
  234. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/queue_diagnose.py +0 -0
  235. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/reconcile.py +0 -0
  236. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/reconcile_tick.py +0 -0
  237. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/refine_chat.py +0 -0
  238. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_cordon.py +0 -0
  239. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_propagate.py +0 -0
  240. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_verify.py +0 -0
  241. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/release_window.py +0 -0
  242. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/repo_edit.py +0 -0
  243. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/repo_onboard.py +0 -0
  244. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/reports.py +0 -0
  245. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/revalidate.py +0 -0
  246. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/review.py +0 -0
  247. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/scorecard.py +0 -0
  248. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/self_health.py +0 -0
  249. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/serve_app.py +0 -0
  250. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  251. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  252. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  253. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  254. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  255. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/portal-followup/SKILL.md +0 -0
  256. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/release-now/SKILL.md +0 -0
  257. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  258. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  259. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/skills/update-issue/SKILL.md +0 -0
  260. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/smoke.py +0 -0
  261. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/spend_ceiling.py +0 -0
  262. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/split_work.py +0 -0
  263. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/stage_projection.py +0 -0
  264. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/state.py +0 -0
  265. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_author.py +0 -0
  266. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_chat.py +0 -0
  267. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_orchestrator.py +0 -0
  268. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/test_report.py +0 -0
  269. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/tui_release.py +0 -0
  270. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/usage.py +0 -0
  271. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/usage_limits.py +0 -0
  272. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/usage_rollup.py +0 -0
  273. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coord/worker_events.py +0 -0
  274. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/coordinator.example.yml +0 -0
  275. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-agent.service +0 -0
  276. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-db-backup.service +0 -0
  277. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-db-backup.sh +0 -0
  278. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-db-backup.timer +0 -0
  279. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-drive-queue.service +0 -0
  280. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-drive-queue.timer +0 -0
  281. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-failure-notify.service +0 -0
  282. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-failure-notify.sh +0 -0
  283. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-fleet-watchdog.service +0 -0
  284. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-fleet-watchdog.timer +0 -0
  285. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-notify.service +0 -0
  286. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-notify.timer +0 -0
  287. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-propagate.service +0 -0
  288. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-propagate.timer +0 -0
  289. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-window.service +0 -0
  290. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-release-window.timer +0 -0
  291. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-serve.service +0 -0
  292. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-dist-build.service +0 -0
  293. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-dist-build.sh +0 -0
  294. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-dist-build.timer +0 -0
  295. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web-rollback.sh +0 -0
  296. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/coord-web.service +0 -0
  297. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/deploy/node-shim.sh +0 -0
  298. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  299. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ADR_COORD_WEB_CI.md +0 -0
  300. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ADR_COORD_WEB_DIST.md +0 -0
  301. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/AGENT_OPERATIONS.md +0 -0
  302. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ARCHITECTURE.md +0 -0
  303. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ARCH_SECURITY_GATES.md +0 -0
  304. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/COCKPIT.md +0 -0
  305. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CONTROL_CENTER.md +0 -0
  306. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/COST_DISCIPLINE.md +0 -0
  307. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CROSS_PLATFORM.md +0 -0
  308. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CUSTOMER_FACING_APPS.md +0 -0
  309. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/CUSTOMER_PORTAL.md +0 -0
  310. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/DRIVE_QUEUE.md +0 -0
  311. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/EPHEMERAL_WORKERS.md +0 -0
  312. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/FORGE_MIGRATION.md +0 -0
  313. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/GRAPHIFY_SETUP.md +0 -0
  314. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ISSUE_GUIDANCE.md +0 -0
  315. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/MAC_MINI.md +0 -0
  316. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  317. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/NOTIFIER.md +0 -0
  318. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/OPENCODE_VERIFICATION.md +0 -0
  319. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/OPERATING_GOTCHAS.md +0 -0
  320. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/OPERATOR_GUIDES.md +0 -0
  321. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/ORACLE_LOOP.md +0 -0
  322. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/PHONE_WEBAPP.md +0 -0
  323. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/PIPELINE_V2.md +0 -0
  324. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/PLATFORM_EVOLUTION.md +0 -0
  325. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/SECOND_BACKEND.md +0 -0
  326. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/STORE_SERVICE.md +0 -0
  327. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  328. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/WEB_CONTROL_CENTER.md +0 -0
  329. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/WSL_WINDOWS_WORKER.md +0 -0
  330. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/README.md +0 -0
  331. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/_tokens.css +0 -0
  332. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/issue-detail.html +0 -0
  333. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/pipeline-narrow.html +0 -0
  334. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/docs/mocks/web/pipeline-wide.html +0 -0
  335. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/graphify-out/.gitignore +0 -0
  336. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/install-agent.sh +0 -0
  337. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/audit_review_verdict_overrides.py +0 -0
  338. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  339. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/build-worker-image.sh +0 -0
  340. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/coordinator-machine.py +0 -0
  341. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/epic-down.sh +0 -0
  342. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/epic-up.sh +0 -0
  343. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/preflight.sh +0 -0
  344. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/provision-worker.sh +0 -0
  345. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  346. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  347. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/azure-workers/verify-github-token.sh +0 -0
  348. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/check_gh_argv_containment.py +0 -0
  349. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/codegen.py +0 -0
  350. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/coord-test-runner.sh +0 -0
  351. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/coord-venv-rollback.sh +0 -0
  352. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/drive-batch.sh +0 -0
  353. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/fleet_watchdog.py +0 -0
  354. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/gen_board_fixture.py +0 -0
  355. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/gen_mock_index.py +0 -0
  356. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/next_release_tag.py +0 -0
  357. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/run_tests_in_populated_home.sh +0 -0
  358. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/run_tests_without_gh.sh +0 -0
  359. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/smoke_437_interactive.py +0 -0
  360. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/verify_878_review_capture.py +0 -0
  361. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/verify_release_published.py +0 -0
  362. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/scripts/verify_release_wheel.py +0 -0
  363. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/setup.cfg +0 -0
  364. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/SMOKE_SET.md +0 -0
  365. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/__init__.py +0 -0
  366. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  367. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/contract.md +0 -0
  368. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/manifest.yml +0 -0
  369. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  370. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  371. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  372. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  373. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/conftest.py +0 -0
  374. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/contract.md +0 -0
  375. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/manifest.yml +0 -0
  376. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  377. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  378. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/contract.md +0 -0
  379. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/manifest.yml +0 -0
  380. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  381. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  382. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  383. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  384. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  385. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  386. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  387. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  388. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  389. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  390. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/contract.md +0 -0
  391. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  392. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  393. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/manifest.yml +0 -0
  394. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  395. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-51/tsconfig.json +0 -0
  396. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  397. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  398. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  399. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/contract.md +0 -0
  400. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  401. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/manifest.yml +0 -0
  402. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  403. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  404. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  405. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  406. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  407. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  408. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  409. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  410. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  411. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  412. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  413. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  414. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/contract.md +0 -0
  415. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  416. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/manifest.yml +0 -0
  417. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  418. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  419. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  420. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  421. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  422. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  423. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  424. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/conftest.py +0 -0
  425. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/board-pipeline-basic.json +0 -0
  426. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  427. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  428. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  429. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  430. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/all_pass.json +0 -0
  431. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  432. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/mixed_fail.json +0 -0
  433. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  434. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  435. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/skip.json +0 -0
  436. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/playwright/truncated.json +0 -0
  437. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  438. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  439. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  440. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  441. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  442. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  443. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  444. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  445. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_acceptance.py +0 -0
  446. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_acceptance_drivers.py +0 -0
  447. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent.py +0 -0
  448. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_api_error.py +0 -0
  449. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_app.py +0 -0
  450. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_branch_base.py +0 -0
  451. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_branch_capture.py +0 -0
  452. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_config_free_1712.py +0 -0
  453. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_deploy_units_endpoint.py +0 -0
  454. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_dirty_worktree.py +0 -0
  455. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  456. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_graph_self_heal.py +0 -0
  457. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_health_h3.py +0 -0
  458. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_idle_restart.py +0 -0
  459. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_push_failure.py +0 -0
  460. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_reap.py +0 -0
  461. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_repos_and_pull.py +0 -0
  462. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_restart_services_endpoint.py +0 -0
  463. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_skills_self_heal.py +0 -0
  464. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_startup_diagnostics.py +0 -0
  465. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_update.py +0 -0
  466. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_update_bluegreen.py +0 -0
  467. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_usage_limit.py +0 -0
  468. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_agent_zero_commit.py +0 -0
  469. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ambient_home_isolation.py +0 -0
  470. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approve_dependency_busy_2804.py +0 -0
  471. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approve_reject_plan.py +0 -0
  472. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approve_usage_gate.py +0 -0
  473. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_approved_work_2532.py +0 -0
  474. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_assignment_already_recorded_daemon.py +0 -0
  475. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_audit_log.py +0 -0
  476. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_audit_outcome.py +0 -0
  477. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_audit_query.py +0 -0
  478. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_auto_loop.py +0 -0
  479. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_auto_release_publish_2035.py +0 -0
  480. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_backend_selection.py +0 -0
  481. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_base_checkout_restore.py +0 -0
  482. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_block_log.py +0 -0
  483. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_cap_762.py +0 -0
  484. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_fixture.py +0 -0
  485. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_read_path.py +0 -0
  486. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_schema.py +0 -0
  487. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_service.py +0 -0
  488. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_state.py +0 -0
  489. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_board_wire.py +0 -0
  490. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_brain.py +0 -0
  491. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_branch_model.py +0 -0
  492. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_bug_intake.py +0 -0
  493. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_build_worker_image_env_update.py +0 -0
  494. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cargo_cache.py +0 -0
  495. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_check_gh_argv_containment.py +0 -0
  496. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_acceptance_gate_1950.py +0 -0
  497. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_fix.py +0 -0
  498. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_gitlab.py +0 -0
  499. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_parity_2091.py +0 -0
  500. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_ci_store.py +0 -0
  501. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_claim.py +0 -0
  502. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_claude_md_budget.py +0 -0
  503. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_acceptance.py +0 -0
  504. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign.py +0 -0
  505. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  506. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_interactive_remote.py +0 -0
  507. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_provider.py +0 -0
  508. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  509. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_audit.py +0 -0
  510. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_chat_continue.py +0 -0
  511. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_decide.py +0 -0
  512. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_config_provenance.py +0 -0
  513. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_forge_availability.py +0 -0
  514. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_graph.py +0 -0
  515. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_diagnose_self.py +0 -0
  516. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_doctor.py +0 -0
  517. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_doctor_config_free_1801.py +0 -0
  518. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  519. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_drive.py +0 -0
  520. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_drive_queue.py +0 -0
  521. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_escalate.py +0 -0
  522. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_fix_headless_review.py +0 -0
  523. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_gate_a.py +0 -0
  524. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_install_drift.py +0 -0
  525. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_install_skills.py +0 -0
  526. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_comment.py +0 -0
  527. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_create_label.py +0 -0
  528. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_reopen.py +0 -0
  529. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_issue_view_list.py +0 -0
  530. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_merge.py +0 -0
  531. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_assign.py +0 -0
  532. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_capture.py +0 -0
  533. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_chat_add_child.py +0 -0
  534. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_dispatch.py +0 -0
  535. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_gate_b.py +0 -0
  536. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_gate_c.py +0 -0
  537. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_order.py +0 -0
  538. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  539. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_milestone_ship.py +0 -0
  540. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_network.py +0 -0
  541. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_new_issue_chat.py +0 -0
  542. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_plans.py +0 -0
  543. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_portal.py +0 -0
  544. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_pr.py +0 -0
  545. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_pull_artifact.py +0 -0
  546. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_queue.py +0 -0
  547. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_reattach_sessions.py +0 -0
  548. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_refine_board.py +0 -0
  549. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_release_preflight.py +0 -0
  550. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_release_propagate.py +0 -0
  551. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_release_window.py +0 -0
  552. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_repo_2220.py +0 -0
  553. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  554. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_scorecard.py +0 -0
  555. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_set_review_findings.py +0 -0
  556. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_advisory_terminal.py +0 -0
  557. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_contested_tag.py +0 -0
  558. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_merge_queue.py +0 -0
  559. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_provider.py +0 -0
  560. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_review_finalizing.py +0 -0
  561. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_test_failed_tag.py +0 -0
  562. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_status_usage_limit.py +0 -0
  563. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_sync_comments_873.py +0 -0
  564. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_test_plan.py +0 -0
  565. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_track.py +0 -0
  566. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_tui_update.py +0 -0
  567. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cli_wait.py +0 -0
  568. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_client_base_install.py +0 -0
  569. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_commands_common.py +0 -0
  570. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_comments.py +0 -0
  571. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_completion_summary.py +0 -0
  572. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config.py +0 -0
  573. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_acceptance.py +0 -0
  574. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_audit.py +0 -0
  575. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_pricing.py +0 -0
  576. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  577. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_config_usage_gate.py +0 -0
  578. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_confirm_test.py +0 -0
  579. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_conflict_fix.py +0 -0
  580. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_conflict_fix_semantic.py +0 -0
  581. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  582. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test.py +0 -0
  583. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_baseline.py +0 -0
  584. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_populated_home.py +0 -0
  585. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_routing.py +0 -0
  586. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_test_runner_toolchain.py +0 -0
  587. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_uat.py +0 -0
  588. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coord_web_sse_restart_live.py +0 -0
  589. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_coordinator_machine.py +0 -0
  590. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_cross_platform_imports.py +0 -0
  591. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dao.py +0 -0
  592. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard.py +0 -0
  593. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard_fixture.py +0 -0
  594. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard_terminal.py +0 -0
  595. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dashboard_terminal_live.py +0 -0
  596. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_db.py +0 -0
  597. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dead_end.py +0 -0
  598. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_decomposition_chat.py +0 -0
  599. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_coord_db_backup.py +0 -0
  600. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_coord_web_dist.py +0 -0
  601. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_coord_web_rollback.py +0 -0
  602. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_drive_queue_unit.py +0 -0
  603. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_failure_notify_unit.py +0 -0
  604. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_manifest.py +0 -0
  605. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_notify_unit.py +0 -0
  606. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_units_lane.py +0 -0
  607. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deploy_web_unit.py +0 -0
  608. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_deps.py +0 -0
  609. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_diagnose.py +0 -0
  610. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dispatch.py +0 -0
  611. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dispatch_target_validation.py +0 -0
  612. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_dist_name.py +0 -0
  613. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_done_housekeeping.py +0 -0
  614. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive.py +0 -0
  615. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue.py +0 -0
  616. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_blocked_rendering.py +0 -0
  617. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_launch_argv.py +0 -0
  618. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  619. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_roll_pending.py +0 -0
  620. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  621. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_state.py +0 -0
  622. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_drive_tmux.py +0 -0
  623. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_epic_up_capability_detection.py +0 -0
  624. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  625. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_epic_up_image_provenance.py +0 -0
  626. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_errors.py +0 -0
  627. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_events.py +0 -0
  628. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_failure_class.py +0 -0
  629. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_filelock.py +0 -0
  630. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  631. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fix_of_force_override.py +0 -0
  632. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_config_health.py +0 -0
  633. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_health_probes.py +0 -0
  634. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_health_snapshot.py +0 -0
  635. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_fleet_watchdog.py +0 -0
  636. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_forge_availability.py +0 -0
  637. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_freshness.py +0 -0
  638. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gate_a.py +0 -0
  639. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gate_b.py +0 -0
  640. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gate_snapshot_staleness.py +0 -0
  641. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gates.py +0 -0
  642. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  643. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_gen_mock_index.py +0 -0
  644. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_generated_rust_fixture.py +0 -0
  645. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_generated_types_fixture.py +0 -0
  646. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_github_ops.py +0 -0
  647. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_github_throttle.py +0 -0
  648. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_goal.py +0 -0
  649. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_graph_health.py +0 -0
  650. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_graph_selfheal_absent_2237.py +0 -0
  651. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_handoff.py +0 -0
  652. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_checks.py +0 -0
  653. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_cli.py +0 -0
  654. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_cli_graph.py +0 -0
  655. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_config.py +0 -0
  656. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_context.py +0 -0
  657. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_coord_web_ci_pin.py +0 -0
  658. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_deploy_lane_facts.py +0 -0
  659. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_fix.py +0 -0
  660. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_incident_regression.py +0 -0
  661. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_issues_sync_staleness.py +0 -0
  662. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_pypi.py +0 -0
  663. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_registry.py +0 -0
  664. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_release_cordon_probe.py +0 -0
  665. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_timer_active.py +0 -0
  666. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_toolchain.py +0 -0
  667. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_unit_drift.py +0 -0
  668. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_health_unit_enablement.py +0 -0
  669. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_hooks.py +0 -0
  670. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_human_attended_437.py +0 -0
  671. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_init.py +0 -0
  672. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_integration.py +0 -0
  673. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_briefing_echo.py +0 -0
  674. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_pane_log_2541.py +0 -0
  675. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_prefill_state.py +0 -0
  676. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_session_relaunch.py +0 -0
  677. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_test_verdict_backstop.py +0 -0
  678. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_token_attribution.py +0 -0
  679. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_interactive_worktree.py +0 -0
  680. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_issue_store_seam.py +0 -0
  681. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_issues_sync_status.py +0 -0
  682. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_liveness_auditor.py +0 -0
  683. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_liveness_notify.py +0 -0
  684. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_lock_contention_ratchet.py +0 -0
  685. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_machine_pause.py +0 -0
  686. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_merge_queue.py +0 -0
  687. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_merge_verify.py +0 -0
  688. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_chat.py +0 -0
  689. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_dispatch.py +0 -0
  690. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_gate.py +0 -0
  691. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_order.py +0 -0
  692. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_milestone_seam.py +0 -0
  693. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_mock_author.py +0 -0
  694. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_model_tiering.py +0 -0
  695. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_models.py +0 -0
  696. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_models_config_labels.py +0 -0
  697. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_needs_attention.py +0 -0
  698. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_network.py +0 -0
  699. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_new_issue_chat.py +0 -0
  700. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_next_release_tag.py +0 -0
  701. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_node_shim.py +0 -0
  702. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_baseline.py +0 -0
  703. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_cli.py +0 -0
  704. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_collect.py +0 -0
  705. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_config.py +0 -0
  706. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_drive_seam.py +0 -0
  707. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_isolation.py +0 -0
  708. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_predicate.py +0 -0
  709. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_quiet_hours.py +0 -0
  710. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notifier_service.py +0 -0
  711. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notify.py +0 -0
  712. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_notify_drain.py +0 -0
  713. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_openapi.py +0 -0
  714. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_operational_defaults.py +0 -0
  715. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_overlap_fence.py +0 -0
  716. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_overlap_predict.py +0 -0
  717. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_packaged_deploy_units.py +0 -0
  718. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_parentage.py +0 -0
  719. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_paste_landed.py +0 -0
  720. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  721. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_pipeline.py +0 -0
  722. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_followup_approve_plan_command.py +0 -0
  723. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_followup_pr_command.py +0 -0
  724. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_followup_review_command.py +0 -0
  725. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_only.py +0 -0
  726. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_plan_parser.py +0 -0
  727. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_platform_paths.py +0 -0
  728. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_bridge.py +0 -0
  729. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_config.py +0 -0
  730. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_store.py +0 -0
  731. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_portal_sync.py +0 -0
  732. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_pr_body_lint.py +0 -0
  733. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_prereqs.py +0 -0
  734. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_production_db_guard.py +0 -0
  735. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_progress.py +0 -0
  736. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_provider_seam.py +0 -0
  737. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_providers.py +0 -0
  738. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_providers_config_labels.py +0 -0
  739. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_providers_pty.py +0 -0
  740. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_quiet_hours.py +0 -0
  741. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_quiet_hours_store_2146.py +0 -0
  742. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reap_merged_sessions.py +0 -0
  743. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reap_stale_interactive_tick.py +0 -0
  744. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile.py +0 -0
  745. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_branch.py +0 -0
  746. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_completions.py +0 -0
  747. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  748. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_merges.py +0 -0
  749. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_no_agent_record.py +0 -0
  750. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_tick.py +0 -0
  751. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reconcile_usage_limit_done.py +0 -0
  752. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_refine_chat.py +0 -0
  753. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_2101.py +0 -0
  754. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  755. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_deadlock_2240.py +0 -0
  756. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_cordon_stuck_2490.py +0 -0
  757. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_propagate.py +0 -0
  758. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_propagate_threshold.py +0 -0
  759. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_roll_between_legs_2854.py +0 -0
  760. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_roll_window_handoff.py +0 -0
  761. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_unified_1242.py +0 -0
  762. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_verify.py +0 -0
  763. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_release_window.py +0 -0
  764. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_remote_auto_prune.py +0 -0
  765. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_remote_interactive_reaper.py +0 -0
  766. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_add.py +0 -0
  767. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_edit_2220.py +0 -0
  768. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_graph_fleet_2237.py +0 -0
  769. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_repo_onboard_2220.py +0 -0
  770. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_report_result_push.py +0 -0
  771. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_reports.py +0 -0
  772. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_retry.py +0 -0
  773. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_retry_advisory_1606.py +0 -0
  774. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_retry_type_1636.py +0 -0
  775. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_revalidate.py +0 -0
  776. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review.py +0 -0
  777. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_end_review_without_verdict.py +0 -0
  778. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_parse_failure_diagnostic.py +0 -0
  779. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_reaffirm.py +0 -0
  780. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_state.py +0 -0
  781. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_verdict_backstop.py +0 -0
  782. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_verdict_override_audit.py +0 -0
  783. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_verdict_relay.py +0 -0
  784. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_review_zero_commits.py +0 -0
  785. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_scoped_review_wiring.py +0 -0
  786. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_scorecard.py +0 -0
  787. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_self_health.py +0 -0
  788. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_serve.py +0 -0
  789. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_serve_app_board_trim.py +0 -0
  790. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_session.py +0 -0
  791. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_slice_issue_attribution.py +0 -0
  792. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_smoke.py +0 -0
  793. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_smoke_live_checkout_restore.py +0 -0
  794. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_smoke_workflow.py +0 -0
  795. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_spend_ceiling.py +0 -0
  796. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_spend_ceiling_coordinator.py +0 -0
  797. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_split.py +0 -0
  798. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_split_work.py +0 -0
  799. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stage_projection.py +0 -0
  800. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stale_busy_reviewer_697.py +0 -0
  801. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stalled_pipeline.py +0 -0
  802. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_state.py +0 -0
  803. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_state_review_findings_daemon.py +0 -0
  804. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_status_fleet_footer.py +0 -0
  805. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stop_1567.py +0 -0
  806. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_store_contract.py +0 -0
  807. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stuck.py +0 -0
  808. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  809. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_terminal_command.py +0 -0
  810. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_author.py +0 -0
  811. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_chat.py +0 -0
  812. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_orchestrator.py +0 -0
  813. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_report.py +0 -0
  814. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_verdict_parsing.py +0 -0
  815. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_test_verdict_transcript_floor.py +0 -0
  816. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_text_io_encoding_audit.py +0 -0
  817. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_thin_client_board_audit.py +0 -0
  818. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_thin_client_config_load_1080.py +0 -0
  819. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_thin_client_daemon_routing_906.py +0 -0
  820. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_tmux_host.py +0 -0
  821. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_tmux_session.py +0 -0
  822. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_transcript_floor.py +0 -0
  823. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_usage.py +0 -0
  824. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_usage_limits.py +0 -0
  825. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_usage_rollup.py +0 -0
  826. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_venv_live_install_2121.py +0 -0
  827. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_version_single_source.py +0 -0
  828. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_watch.py +0 -0
  829. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  830. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_env_venv_isolation.py +0 -0
  831. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_events.py +0 -0
  832. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_image_pin_sync.py +0 -0
  833. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_safety.py +0 -0
  834. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worker_test_scoping.py +0 -0
  835. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worktree.py +0 -0
  836. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  837. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/Cargo.lock +0 -0
  838. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/Cargo.toml +0 -0
  839. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/cargo-config-local-quadraui.toml.example +0 -0
  840. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/approved.rs +0 -0
  841. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/audit.rs +0 -0
  842. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/chat.rs +0 -0
  843. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/data.rs +0 -0
  844. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/dialogs.rs +0 -0
  845. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/doc_tabs.rs +0 -0
  846. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/drive.rs +0 -0
  847. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/drive_queue.rs +0 -0
  848. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/escalation.rs +0 -0
  849. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/events.rs +0 -0
  850. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fixtures.rs +0 -0
  851. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fleet_health.rs +0 -0
  852. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fleet_sessions.rs +0 -0
  853. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/fleet_terminals.rs +0 -0
  854. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/format.rs +0 -0
  855. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/milestone_dag.rs +0 -0
  856. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/mod.rs +0 -0
  857. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/msv.rs +0 -0
  858. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/pipeline.rs +0 -0
  859. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/plans.rs +0 -0
  860. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/render.rs +0 -0
  861. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/reports.rs +0 -0
  862. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/sessions.rs +0 -0
  863. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/settings_ui.rs +0 -0
  864. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/sidebar.rs +0 -0
  865. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/terminal.rs +0 -0
  866. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/tests.rs +0 -0
  867. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/types/generated.rs +0 -0
  868. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/types.rs +0 -0
  869. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/app/workspace.rs +0 -0
  870. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/bin/gtk.rs +0 -0
  871. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/commands.rs +0 -0
  872. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/lib.rs +0 -0
  873. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/main.rs +0 -0
  874. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/src/settings.rs +0 -0
  875. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/tests/acceptance.rs +0 -0
  876. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/tests/cli.rs +0 -0
  877. {code_coordinator-0.5.272 → code_coordinator-0.5.273}/tui/tests/fixtures/board_sample.json +0 -0
@@ -320,3 +320,61 @@ jobs:
320
320
  # the half of that check this repo can still make (the generator runs and
321
321
  # covers every schema; the coord-web byte-comparison itself is that repo's
322
322
  # own CI, per the paragraph above).
323
+
324
+ # #2886: a real Postgres 16 service, so `coord/sql.py`'s Postgres branches
325
+ # (paramstyle translation, upsert idioms, `information_schema`
326
+ # introspection, `RETURNING`, `dict_row`) — spoken since #2719 but never
327
+ # once executed against a real server — actually run against one, and so
328
+ # `COORD_TEST_BACKEND=postgres` (#2884's test-suite backend switch) means
329
+ # something in CI for the first time.
330
+ #
331
+ # SEPARATE JOB, not a `services:` block bolted onto `test` above, for two
332
+ # reasons: (1) the SQLite lane must stay exactly as fast and exactly as
333
+ # reliable as it is today — a Postgres service, even an unused one, is
334
+ # more CI surface for that job to depend on for zero benefit to the
335
+ # SQLite path; (2) `continue-on-error: true` below softens THIS job's
336
+ # conclusion without touching `test`'s at all. Running the whole suite
337
+ # (`coord_db` is autouse — see tests/conftest.py — so every one of ~400
338
+ # test files follows `COORD_TEST_BACKEND` for free) against a backend
339
+ # nothing has ever run it against is expected to be red for real,
340
+ # unrelated-to-this-PR reasons at first (coord/db.py's `_ensure_schema`
341
+ # and friends were written and only ever exercised against SQLite) — the
342
+ # harness-portability issue's deliverable is exactly that failure list.
343
+ # `continue-on-error: true` keeps this job's signal visible (its own
344
+ # conclusion is still pass/fail on the Checks tab) without blocking merges
345
+ # on it. Flip it off once that failure list is closed out.
346
+ #
347
+ # `psycopg` is an optional extra (`postgres`, this issue) — never a base
348
+ # or `[dev]` dependency (see `pyproject.toml`) — so installing it is this
349
+ # job's own opt-in `pip install -e ".[dev,postgres]"`, not a change to
350
+ # what every other job's `pip install -e ".[dev]"` pulls in.
351
+ postgres:
352
+ runs-on: ubuntu-latest
353
+ continue-on-error: true
354
+ services:
355
+ postgres:
356
+ image: postgres:16
357
+ env:
358
+ POSTGRES_PASSWORD: postgres
359
+ options: >-
360
+ --health-cmd pg_isready --health-interval 10s
361
+ --health-timeout 5s --health-retries 5
362
+ ports:
363
+ - 5432:5432
364
+ env:
365
+ COORD_TEST_BACKEND: postgres
366
+ # The default image's bootstrap database is named after POSTGRES_USER
367
+ # (postgres) since no POSTGRES_DB was set above — matches
368
+ # tests/backends.py's schema-per-test isolation, which needs CREATE on
369
+ # an existing database, not a database of its own.
370
+ COORD_TEST_POSTGRES_DSN: postgresql://postgres:postgres@localhost:5432/postgres
371
+ steps:
372
+ - uses: actions/checkout@v4
373
+ - uses: actions/setup-python@v5
374
+ with:
375
+ python-version: "3.12"
376
+ - run: pip install -e ".[dev,postgres]"
377
+ # #2180: same split as the `test` job above — the sealed acceptance
378
+ # suite is gated separately through the #2164 CI wrapper, not swept
379
+ # into this job's ordinary pytest run.
380
+ - run: pytest --ignore=tests/acceptance
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.272
3
+ Version: 0.5.273
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
@@ -26,6 +26,8 @@ Requires-Dist: starlette>=0.37; extra == "server"
26
26
  Requires-Dist: uvicorn>=0.30; extra == "server"
27
27
  Requires-Dist: websockets>=12.0; extra == "server"
28
28
  Requires-Dist: psutil>=5.9; extra == "server"
29
+ Provides-Extra: postgres
30
+ Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
29
31
  Provides-Extra: all
30
32
  Requires-Dist: code-coordinator[server]; extra == "all"
31
33
  Provides-Extra: dev
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.272
3
+ Version: 0.5.273
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
@@ -26,6 +26,8 @@ Requires-Dist: starlette>=0.37; extra == "server"
26
26
  Requires-Dist: uvicorn>=0.30; extra == "server"
27
27
  Requires-Dist: websockets>=12.0; extra == "server"
28
28
  Requires-Dist: psutil>=5.9; extra == "server"
29
+ Provides-Extra: postgres
30
+ Requires-Dist: psycopg[binary]>=3.1; extra == "postgres"
29
31
  Provides-Extra: all
30
32
  Requires-Dist: code-coordinator[server]; extra == "all"
31
33
  Provides-Extra: dev
@@ -18,6 +18,9 @@ setuptools>=68
18
18
  setuptools-scm>=8
19
19
  wheel
20
20
 
21
+ [postgres]
22
+ psycopg[binary]>=3.1
23
+
21
24
  [server]
22
25
  starlette>=0.37
23
26
  uvicorn>=0.30
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.272",
2
+ "tag": "0.5.273",
3
3
  "distance": 0,
4
- "node": "g86d2609016c406aeea4b99ed80b0eae4e2963c25",
4
+ "node": "gd5980777425030eea6f688b62a154d8312a34199",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -71,6 +71,43 @@ class UnsupportedDialectError(ValueError):
71
71
  """Raised when a connection's driver module maps to no known dialect."""
72
72
 
73
73
 
74
+ #: What to tell a caller who hit a Postgres codepath without the extra
75
+ #: installed -- mirrors ``coord.commands._common.SERVER_EXTRA_INSTALL_HINT``'s
76
+ #: shape for the ``[server]`` extra.
77
+ POSTGRES_EXTRA_INSTALL_HINT = "pip install 'code-coordinator[postgres]'"
78
+
79
+
80
+ def _import_psycopg() -> Any:
81
+ """Import ``psycopg``, translating its absence into an actionable message
82
+ (#2886).
83
+
84
+ ``psycopg`` is an optional dependency -- the ``postgres`` extra -- never a
85
+ base or ``[dev]`` one (see ``pyproject.toml``'s ``[project.optional-
86
+ dependencies]``): every existing SQLite deployment must keep working
87
+ without ever pulling it in. Hitting this on an install that never asked
88
+ for Postgres is therefore the expected, common case, not a bug -- so
89
+ every Postgres call site in this module that needs the driver
90
+ (:func:`connect`, :func:`row_factory_for`, :func:`driver_error`) routes
91
+ its import through here rather than a bare ``import psycopg``, so the
92
+ failure names the extra to install instead of surfacing a raw
93
+ ``ModuleNotFoundError: No module named 'psycopg'`` traceback.
94
+
95
+ :func:`driver_errors` deliberately does NOT route through here -- it
96
+ degrades silently to ``(sqlite3.Error,)`` when psycopg is absent (that is
97
+ its whole contract), so it keeps its own bare ``import psycopg`` inside a
98
+ caught ``try/except ImportError`` rather than raising through this
99
+ helper's message just to swallow it unread.
100
+ """
101
+ try:
102
+ import psycopg # noqa: PLC0415 -- optional dep, see docstring
103
+ except ImportError as exc: # ModuleNotFoundError is a subclass
104
+ raise ModuleNotFoundError(
105
+ "the Postgres backend needs the `psycopg` driver, which is not "
106
+ f"installed. Install it with: {POSTGRES_EXTRA_INSTALL_HINT}"
107
+ ) from exc
108
+ return psycopg
109
+
110
+
74
111
  def detect_dialect(conn: Any) -> str:
75
112
  """Identify *conn*'s SQL dialect from its concrete connection type.
76
113
 
@@ -136,7 +173,7 @@ def connect(
136
173
  superseded #2766 decision note.
137
174
 
138
175
  **Postgres** (``dsn`` required): ``psycopg.connect(dsn)``. ``psycopg`` is
139
- an optional dependency (see :func:`row_factory_for`) imported
176
+ an optional dependency (see :func:`_import_psycopg`) imported
140
177
  function-locally, so calling this with ``backend=DIALECT_POSTGRES`` before
141
178
  psycopg is installed raises ``ImportError``/``ModuleNotFoundError`` rather
142
179
  than breaking import of this module for everyone else. *read_only* has no
@@ -157,7 +194,7 @@ def connect(
157
194
  if backend == DIALECT_POSTGRES:
158
195
  if not dsn:
159
196
  raise ValueError("sql.connect(backend='postgres') requires dsn")
160
- import psycopg # noqa: PLC0415 -- optional dep, see row_factory_for
197
+ psycopg = _import_psycopg()
161
198
 
162
199
  return psycopg.connect(dsn)
163
200
  raise UnsupportedDialectError(backend)
@@ -348,19 +385,20 @@ def row_factory_for(dialect: str) -> Any:
348
385
 
349
386
  ``sqlite3.Row`` is returned directly (it's a base-dependency import,
350
387
  already used throughout this tree). ``psycopg.rows.dict_row`` is
351
- imported function-locally -- ``psycopg`` is not a base or even a
352
- ``server``-extra dependency yet (see ``pyproject.toml``'s ``[project]
353
- dependencies`` comment on why third-party imports the base client
354
- doesn't need stay function-local) -- so calling this with
355
- :data:`DIALECT_POSTGRES` before a Postgres backend is actually installed
356
- raises ``ImportError``/``ModuleNotFoundError`` rather than breaking
357
- import of this module for everyone else.
388
+ imported function-locally -- ``psycopg`` is an optional dependency (the
389
+ ``postgres`` extra, #2886), never a base or ``[dev]`` one (see
390
+ ``pyproject.toml``'s ``[project.optional-dependencies]``) -- so calling
391
+ this with :data:`DIALECT_POSTGRES` before the extra is installed raises
392
+ ``ImportError``/``ModuleNotFoundError``, naming the extra to install
393
+ (see :func:`_import_psycopg`), rather than breaking import of this
394
+ module for everyone else.
358
395
  """
359
396
  if dialect == DIALECT_SQLITE:
360
397
  import sqlite3
361
398
 
362
399
  return sqlite3.Row
363
400
  if dialect == DIALECT_POSTGRES:
401
+ _import_psycopg() # translate a missing psycopg into an actionable message
364
402
  from psycopg.rows import dict_row # noqa: PLC0415 -- optional dep, see docstring
365
403
 
366
404
  return dict_row
@@ -615,7 +653,7 @@ def driver_error(conn: Any) -> type[BaseException]:
615
653
 
616
654
  return sqlite3.Error
617
655
  if dialect == DIALECT_POSTGRES:
618
- import psycopg # noqa: PLC0415 -- optional dep, see row_factory_for
656
+ psycopg = _import_psycopg()
619
657
 
620
658
  return psycopg.Error
621
659
  raise UnsupportedDialectError(dialect)
@@ -637,13 +675,15 @@ def driver_errors() -> tuple[type[BaseException], ...]:
637
675
  instead of a retried write.
638
676
 
639
677
  ``sqlite3`` is a stdlib module -- always present, always included.
640
- ``psycopg`` is not a declared dependency (see :func:`row_factory_for`),
641
- so its absence is the normal case today, not an error: this degrades to
642
- ``(sqlite3.Error,)`` rather than raising ``ImportError``, the same
643
- "absence is normal" posture :func:`row_factory_for` takes for a
644
- *known* dialect with no live connection to detect it from -- except
645
- here there is no dialect to detect at all, so degrading silently (not
646
- even function-local, deferred-import-style) is correct: a caller doing
678
+ ``psycopg`` is an optional dependency, not a base or ``[dev]`` one (see
679
+ :func:`_import_psycopg`), so its absence is the normal case today, not an
680
+ error: this degrades to ``(sqlite3.Error,)`` rather than raising
681
+ ``ImportError`` -- unlike every other Postgres call site in this module,
682
+ this one does NOT route through :func:`_import_psycopg` and its
683
+ actionable message, precisely because the message would just be
684
+ swallowed unread by the ``except ImportError`` below; there is no dialect
685
+ to detect at all here, so degrading silently (not even
686
+ function-local, deferred-import-style) is correct: a caller doing
647
687
  ``except sql.driver_errors():`` on a SQLite-only install must keep
648
688
  behaving exactly as ``except sqlite3.OperationalError:`` always did.
649
689
 
@@ -656,7 +696,7 @@ def driver_errors() -> tuple[type[BaseException], ...]:
656
696
 
657
697
  errors: list[type[BaseException]] = [sqlite3.Error]
658
698
  try:
659
- import psycopg # noqa: PLC0415 -- optional dep, see row_factory_for
699
+ import psycopg # noqa: PLC0415 -- optional dep, absence degrades silently, see docstring
660
700
  except ImportError:
661
701
  pass
662
702
  else:
@@ -96,6 +96,17 @@ server = [
96
96
  # Agent-side process/host metrics behind GET /metrics (coord/agent_app.py).
97
97
  "psutil>=5.9",
98
98
  ]
99
+ # #2886: the Postgres driver for `coord/sql.py`'s dialect seam (#2719+).
100
+ # Optional and NEVER folded into `server`/`all`/`dev` below — every existing
101
+ # deployment runs SQLite and must keep working without ever pulling this in;
102
+ # adding it to a shared extra would make it a fleet-wide install change for
103
+ # zero benefit to anyone still on SQLite. `pip install 'code-coordinator[postgres]'`
104
+ # is the only way to get it. `coord/sql.py`'s Postgres call sites
105
+ # (`connect`/`row_factory_for`/`driver_error`) guard the import through
106
+ # `_import_psycopg()`, which names this extra in its error message rather
107
+ # than surfacing a bare `ModuleNotFoundError`; `tests/backends.py` does the
108
+ # same for the test suite's own `COORD_TEST_BACKEND=postgres` opt-in.
109
+ postgres = ["psycopg[binary]>=3.1"]
99
110
  # Convenience alias: "give me everything a full node runs".
100
111
  all = ["code-coordinator[server]"]
101
112
  dev = [
@@ -151,22 +151,20 @@ def _next_schema_name() -> str:
151
151
  def _import_psycopg() -> Any:
152
152
  """Import ``psycopg`` with an actionable message when it isn't installed.
153
153
 
154
- ``psycopg`` is deliberately **not** a declared dependency of this project
155
- yet — adding it (and a Postgres service to CI) is #2886, filed alongside
156
- #2884 precisely so this harness could land first without touching the
157
- dependency set. Selecting the Postgres backend without it is therefore a
158
- normal, expected state that deserves a real explanation rather than a
159
- bare ``ModuleNotFoundError`` traceback out of a fixture.
154
+ ``psycopg`` is an optional dependency — the ``postgres`` extra (#2886) —
155
+ never a base or ``[dev]`` one, so a plain ``pip install -e ".[dev]"``
156
+ does not pull it in. Selecting the Postgres backend without it is
157
+ therefore a normal, expected state that deserves a real explanation
158
+ rather than a bare ``ModuleNotFoundError`` traceback out of a fixture.
160
159
  """
161
160
  try:
162
161
  import psycopg # noqa: PLC0415 -- optional dep, see docstring
163
162
  except ImportError as exc: # ModuleNotFoundError is a subclass
164
163
  raise ModuleNotFoundError(
165
164
  f"{BACKEND_ENV_VAR}={BACKEND_POSTGRES} was requested but the "
166
- "`psycopg` driver is not installed. It is not a declared "
167
- "dependency of this project yet (#2886 adds it, along with a "
168
- "Postgres service in CI). Install it into your venv with "
169
- "`pip install 'psycopg[binary]'` and point "
165
+ "`psycopg` driver is not installed. It is an optional "
166
+ "dependency (the `postgres` extra, #2886) — install it with "
167
+ "`pip install 'code-coordinator[postgres]'` and point "
170
168
  f"{DSN_ENV_VAR} at a reachable server "
171
169
  f"(default: {DEFAULT_POSTGRES_DSN})."
172
170
  ) from exc
@@ -4,25 +4,39 @@ This module is a pure addition: nothing in the tree calls ``coord.sql`` yet
4
4
  (that's Phase C slices 2-7 of #1948), so these tests exercise it directly
5
5
  rather than through any existing call site.
6
6
 
7
- Real ``psycopg``/``psycopg2`` are not installed (this repo has no Postgres
8
- dependency yet — see ``pyproject.toml``), so the Postgres path is exercised
9
- two ways: (1) dialect detection and SQL/param translation, which need only a
10
- *fake* connection class whose ``__module__`` claims to be ``psycopg``, spied
11
- to capture exactly what would have reached a real driver; and (2)
12
- ``row_factory_for``, which asserts the honest failure mode (``ImportError``)
13
- when the optional dependency genuinely isn't there.
7
+ ``psycopg`` is an optional dependency (the ``postgres`` extra, #2886) — most
8
+ runs of this suite still don't have it installed, so the Postgres path is
9
+ exercised two ways: (1) dialect detection and SQL/param translation, which
10
+ need only a *fake* connection class whose ``__module__`` claims to be
11
+ ``psycopg``, spied to capture exactly what would have reached a real driver
12
+ (this needs no driver and no server — it is the bulk of this file, and it
13
+ still runs on every machine, every time); and (2), in the
14
+ "round trip against a real server" section near the bottom, actual
15
+ ``psycopg`` + an actual Postgres 16 connection — the CI ``postgres`` job in
16
+ ``.github/workflows/test.yml`` provides both. Those tests skip cleanly (not
17
+ error) when ``psycopg`` isn't installed or no server is reachable, via the
18
+ ``pg_conn``/``real_postgres`` fixtures below, so a developer with neither
19
+ sees skips, not failures — proving #2886's whole point: every Postgres
20
+ branch coord.sql has ever emitted a fake-connection assertion for now also
21
+ has at least one assertion that it is *accepted* by a real server, not just
22
+ *shaped like* what one would accept.
14
23
  """
15
24
 
16
25
  from __future__ import annotations
17
26
 
18
27
  import ast
28
+ import os
19
29
  import re
20
30
  import sqlite3
31
+ import sys
32
+ import uuid
21
33
  from pathlib import Path
34
+ from typing import Any, Iterator
22
35
 
23
36
  import pytest
24
37
 
25
38
  from coord import sql
39
+ from tests.backends import DSN_ENV_VAR, postgres_dsn
26
40
 
27
41
 
28
42
  # ── fake Postgres-shaped connection (no real psycopg needed) ────────────────
@@ -171,10 +185,19 @@ def test_connect_postgres_requires_dsn():
171
185
  sql.connect(backend=sql.DIALECT_POSTGRES)
172
186
 
173
187
 
174
- def test_connect_postgres_without_psycopg_raises_import_error():
175
- """psycopg is not installed in this repo (see the module docstring) --
176
- the honest failure mode for `backend="postgres"` with no driver present,
177
- matching `row_factory_for`/`driver_error`'s posture for the same gap."""
188
+ def test_connect_postgres_without_psycopg_raises_import_error(monkeypatch):
189
+ """``psycopg`` is an optional dependency (the ``postgres`` extra,
190
+ #2886) -- the honest failure mode for `backend="postgres"` with no
191
+ driver present, matching `row_factory_for`/`driver_error`'s posture for
192
+ the same gap.
193
+
194
+ ``sys.modules["psycopg"] = None`` forces ``import psycopg`` to raise
195
+ ``ImportError`` deterministically -- same technique
196
+ ``tests/test_backend_selection.py`` uses -- so this passes identically
197
+ whether or not the CI job running it happens to have the `[postgres]`
198
+ extra installed (the ``postgres`` job in .github/workflows/test.yml
199
+ does, everything else doesn't)."""
200
+ monkeypatch.setitem(sys.modules, "psycopg", None)
178
201
  with pytest.raises(ImportError):
179
202
  sql.connect(backend=sql.DIALECT_POSTGRES, dsn="postgresql://user@host/db")
180
203
 
@@ -483,7 +506,10 @@ def test_row_factory_for_sqlite_is_sqlite_row():
483
506
  assert sql.row_factory_for(sql.DIALECT_SQLITE) is sqlite3.Row
484
507
 
485
508
 
486
- def test_row_factory_for_postgres_without_psycopg_raises_import_error():
509
+ def test_row_factory_for_postgres_without_psycopg_raises_import_error(monkeypatch):
510
+ """See ``test_connect_postgres_without_psycopg_raises_import_error`` for
511
+ why this forces the absence rather than assuming it (#2886)."""
512
+ monkeypatch.setitem(sys.modules, "psycopg", None)
487
513
  with pytest.raises(ImportError):
488
514
  sql.row_factory_for(sql.DIALECT_POSTGRES)
489
515
 
@@ -641,7 +667,10 @@ def test_driver_error_catches_a_real_sqlite_operational_error(memdb):
641
667
  memdb.execute("SELECT * FROM no_such_table")
642
668
 
643
669
 
644
- def test_driver_error_postgres_without_psycopg_raises_import_error():
670
+ def test_driver_error_postgres_without_psycopg_raises_import_error(monkeypatch):
671
+ """See ``test_connect_postgres_without_psycopg_raises_import_error`` for
672
+ why this forces the absence rather than assuming it (#2886)."""
673
+ monkeypatch.setitem(sys.modules, "psycopg", None)
645
674
  conn = _FakePostgresConnection()
646
675
  with pytest.raises(ImportError):
647
676
  sql.driver_error(conn)
@@ -657,12 +686,16 @@ def test_driver_error_unknown_dialect_raises():
657
686
  # Unlike driver_error(conn), this needs no connection -- it's for the ~18
658
687
  # call sites wrapping a retry_on_locked(...) call (or another write with no
659
688
  # connection in scope) that used to hardcode `except sqlite3.OperationalError:`,
660
- # going silently inert under Postgres. psycopg is not installed in this repo
661
- # (see the module docstring), so degrading to (sqlite3.Error,) rather than
662
- # raising ImportError is the case actually under test here.
689
+ # going silently inert under Postgres. psycopg is an optional dependency
690
+ # (#2886) that most runs of this suite don't have installed, so degrading to
691
+ # (sqlite3.Error,) rather than raising ImportError is the case actually
692
+ # under test here -- forced deterministically below rather than assumed, so
693
+ # this test still passes in the one CI job that DOES have the `[postgres]`
694
+ # extra installed (`postgres` in .github/workflows/test.yml).
663
695
 
664
696
 
665
- def test_driver_errors_degrades_to_sqlite_only_when_psycopg_absent():
697
+ def test_driver_errors_degrades_to_sqlite_only_when_psycopg_absent(monkeypatch):
698
+ monkeypatch.setitem(sys.modules, "psycopg", None)
666
699
  assert sql.driver_errors() == (sqlite3.Error,)
667
700
 
668
701
 
@@ -750,6 +783,187 @@ def test_is_lock_contention_error_false_for_unrelated_exception_with_no_sqlstate
750
783
  assert is_lock_contention_error(ValueError("not a DB error at all")) is False
751
784
 
752
785
 
786
+ # ── round trip against a real server (#2886) ────────────────────────────────
787
+ #
788
+ # Everything above proves what SQL text/params coord.sql *would* send to a
789
+ # real driver, using a fake connection whose __module__ merely claims to be
790
+ # "psycopg" (see the module docstring). None of it proves Postgres *accepts*
791
+ # that text -- coord/sql.py has spoken Postgres since #2719 and none of its
792
+ # Postgres branches had ever executed against a real server before this
793
+ # section existed. These tests fill that gap for the branches #2886 calls
794
+ # out by name: execute/executemany translation, upsert, insert_ignore,
795
+ # insert_returning_id's RETURNING path, table_columns against
796
+ # information_schema, apply_row_factory's dict_row, and
797
+ # autoincrement_pk_ddl's identity-column DDL actually creating a table.
798
+ #
799
+ # `psycopg` is an optional dependency (the `postgres` extra) and most runs of
800
+ # this suite have neither it nor a reachable server -- both the driver import
801
+ # and the connection attempt below skip cleanly (pytest.importorskip /
802
+ # pytest.skip) rather than raising, so `pytest tests/test_sql_dialect.py`
803
+ # with no Postgres anywhere behaves exactly as it did before this section
804
+ # existed: skips, not errors, and NOT gated on `COORD_TEST_BACKEND` (these
805
+ # tests must skip cleanly under the suite's default, unset backend too, not
806
+ # just under an explicit non-`postgres` selection). CI's `postgres` job in
807
+ # .github/workflows/test.yml provides both, and reuses tests/backends.py's
808
+ # `COORD_TEST_POSTGRES_DSN` (#2884) so a developer or CI run only ever needs
809
+ # to set the one env var to make both that harness and these targeted tests
810
+ # exercise the same server.
811
+
812
+
813
+ def _require_psycopg() -> Any:
814
+ return pytest.importorskip(
815
+ "psycopg",
816
+ reason="psycopg not installed -- pip install 'code-coordinator[postgres]'",
817
+ )
818
+
819
+
820
+ @pytest.fixture
821
+ def pg_conn() -> Iterator[Any]:
822
+ """A real ``psycopg`` connection, opened through :func:`sql.connect` (the
823
+ #827 connection factory, so that factory itself is exercised for real
824
+ too) -- in its own private schema, dropped on teardown.
825
+
826
+ Schema-per-test, the same isolation strategy ``tests/backends.py`` uses
827
+ for the whole suite's own Postgres opt-in (#2884) -- a small,
828
+ self-contained copy rather than reaching into that module's private
829
+ ``_open_postgres`` helper, because this fixture has a different
830
+ contract: it must skip cleanly under the suite's *default*
831
+ ``COORD_TEST_BACKEND`` (unset, i.e. SQLite), not just under an explicit
832
+ ``postgres`` selection -- see the section header above.
833
+
834
+ Row factory is left at psycopg's default (tuple rows) -- matching
835
+ ``sqlite3``'s own default, which the ``memdb`` fixture above relies on
836
+ -- so a test that cares about ``dict_row`` calls
837
+ :func:`sql.apply_row_factory` itself, the same way
838
+ ``test_apply_row_factory_makes_rows_dict_accessible`` does for SQLite.
839
+ """
840
+ _require_psycopg()
841
+ dsn = postgres_dsn()
842
+ try:
843
+ conn = sql.connect(backend=sql.DIALECT_POSTGRES, dsn=dsn)
844
+ except Exception as exc: # noqa: BLE001 -- any connect failure is a skip, not a failure
845
+ pytest.skip(f"Postgres not reachable at {dsn!r} ({DSN_ENV_VAR}): {exc}")
846
+ schema = f"coord_sql_dialect_test_{os.getpid()}_{uuid.uuid4().hex[:8]}"
847
+ with conn.cursor() as cur:
848
+ cur.execute(f'CREATE SCHEMA "{schema}"')
849
+ # search_path is a session setting, so every later statement on this
850
+ # connection resolves unqualified table names into the private
851
+ # schema without any test needing to know it exists.
852
+ cur.execute(f'SET search_path TO "{schema}"')
853
+ conn.commit()
854
+ try:
855
+ yield conn
856
+ finally:
857
+ conn.rollback()
858
+ with conn.cursor() as cur:
859
+ cur.execute("SET search_path TO public")
860
+ cur.execute(f'DROP SCHEMA IF EXISTS "{schema}" CASCADE')
861
+ conn.commit()
862
+ conn.close()
863
+
864
+
865
+ def test_detect_dialect_real_postgres_connection(pg_conn):
866
+ assert sql.detect_dialect(pg_conn) == sql.DIALECT_POSTGRES
867
+
868
+
869
+ def test_connect_postgres_round_trip_opens_a_working_connection(pg_conn):
870
+ """:func:`sql.connect` itself (#827), not just its ``ImportError`` guard
871
+ (already covered above) -- ``pg_conn`` opened through it; this proves
872
+ the result is a live, usable connection."""
873
+ cur = sql.execute(pg_conn, "SELECT 1")
874
+ assert cur.fetchone() == (1,)
875
+
876
+
877
+ def test_execute_and_executemany_round_trip_against_real_postgres(pg_conn):
878
+ sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
879
+ sql.execute(pg_conn, "INSERT INTO t (id, a, b) VALUES (?, ?, ?)", (1, "x", "y"))
880
+ sql.executemany(
881
+ pg_conn,
882
+ "INSERT INTO t (id, a, b) VALUES (?, ?, ?)",
883
+ [(2, "p", "q"), (3, "r", "s")],
884
+ )
885
+ pg_conn.commit()
886
+ cur = sql.execute(pg_conn, "SELECT id, a, b FROM t ORDER BY id")
887
+ assert cur.fetchall() == [(1, "x", "y"), (2, "p", "q"), (3, "r", "s")]
888
+
889
+
890
+ def test_execute_preserves_literal_question_mark_against_real_postgres(pg_conn):
891
+ sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
892
+ sql.execute(pg_conn, "INSERT INTO t (id, a, b) VALUES (?, ?, ?)", (1, "why?", "z"))
893
+ pg_conn.commit()
894
+ cur = sql.execute(pg_conn, "SELECT a FROM t WHERE b = ? AND a = 'why?'", ("z",))
895
+ assert cur.fetchone() == ("why?",)
896
+
897
+
898
+ def test_upsert_round_trips_against_real_postgres(pg_conn):
899
+ sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
900
+ pg_conn.commit()
901
+ sql.upsert(pg_conn, "t", ["id", "a", "b"], (1, "first", "y"), conflict_columns=["id"])
902
+ pg_conn.commit()
903
+ sql.upsert(pg_conn, "t", ["id", "a", "b"], (1, "second", "z"), conflict_columns=["id"])
904
+ pg_conn.commit()
905
+ cur = sql.execute(pg_conn, "SELECT a, b FROM t WHERE id = ?", (1,))
906
+ assert cur.fetchone() == ("second", "z")
907
+ assert sql.execute(pg_conn, "SELECT COUNT(*) FROM t").fetchone() == (1,)
908
+
909
+
910
+ def test_insert_ignore_round_trips_against_real_postgres(pg_conn):
911
+ sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT)")
912
+ pg_conn.commit()
913
+ sql.insert_ignore(pg_conn, "t", ["id", "a"], (1, "first"))
914
+ pg_conn.commit()
915
+ sql.insert_ignore(pg_conn, "t", ["id", "a"], (1, "second"))
916
+ pg_conn.commit()
917
+ cur = sql.execute(pg_conn, "SELECT a FROM t WHERE id = ?", (1,))
918
+ assert cur.fetchone() == ("first",)
919
+
920
+
921
+ def test_insert_returning_id_round_trips_against_real_postgres(pg_conn):
922
+ ddl = sql.autoincrement_pk_ddl(sql.DIALECT_POSTGRES)
923
+ sql.execute(pg_conn, f"CREATE TABLE t (id {ddl}, a TEXT)")
924
+ pg_conn.commit()
925
+ new_id = sql.insert_returning_id(pg_conn, "INSERT INTO t (a) VALUES (?)", ("x",))
926
+ pg_conn.commit()
927
+ assert isinstance(new_id, int)
928
+ cur = sql.execute(pg_conn, "SELECT a FROM t WHERE id = ?", (new_id,))
929
+ assert cur.fetchone() == ("x",)
930
+
931
+
932
+ def test_table_columns_round_trips_against_real_information_schema(pg_conn):
933
+ sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
934
+ pg_conn.commit()
935
+ columns = sql.table_columns(pg_conn, "t")
936
+ assert [name for name, _type in columns] == ["id", "a", "b"]
937
+
938
+
939
+ def test_table_columns_round_trips_empty_for_missing_table_against_real_postgres(pg_conn):
940
+ assert sql.table_columns(pg_conn, "no_such_table") == []
941
+
942
+
943
+ def test_apply_row_factory_dict_row_round_trips_against_real_postgres(pg_conn):
944
+ sql.apply_row_factory(pg_conn)
945
+ sql.execute(pg_conn, "CREATE TABLE t (id INTEGER PRIMARY KEY, a TEXT, b TEXT)")
946
+ sql.execute(pg_conn, "INSERT INTO t (id, a, b) VALUES (?, ?, ?)", (1, "x", "y"))
947
+ pg_conn.commit()
948
+ row = sql.execute(pg_conn, "SELECT a, b FROM t WHERE id = ?", (1,)).fetchone()
949
+ assert row["a"] == "x"
950
+ assert row["b"] == "y"
951
+
952
+
953
+ def test_autoincrement_pk_ddl_round_trips_against_real_postgres(pg_conn):
954
+ """The identity-column DDL fragment actually creating a table and
955
+ actually generating monotonic ids -- this branch is pure DDL text with
956
+ no dedicated round trip other than using it exactly as coord/db.py
957
+ does: substituted into a CREATE TABLE and then inserted through."""
958
+ ddl = sql.autoincrement_pk_ddl(sql.DIALECT_POSTGRES)
959
+ sql.execute(pg_conn, f"CREATE TABLE t (id {ddl}, a TEXT)")
960
+ pg_conn.commit()
961
+ first = sql.insert_returning_id(pg_conn, "INSERT INTO t (a) VALUES (?)", ("x",))
962
+ second = sql.insert_returning_id(pg_conn, "INSERT INTO t (a) VALUES (?)", ("y",))
963
+ pg_conn.commit()
964
+ assert second == first + 1
965
+
966
+
753
967
  # ── the ratchet: no raw `?` reaches a driver outside the seam (#2768, #1948) ─
754
968
  #
755
969
  # #1948's first acceptance bullet: "No raw `?` placeholder reaches a driver: