code-coordinator 0.5.272__tar.gz → 0.5.274__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 (882) hide show
  1. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/workflows/test.yml +58 -0
  2. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/PKG-INFO +3 -1
  3. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/PKG-INFO +3 -1
  4. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/SOURCES.txt +5 -0
  5. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/requires.txt +3 -0
  6. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/scm_file_list.json +5 -0
  7. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/scm_version.json +2 -2
  8. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/cli.py +2 -0
  9. code_coordinator-0.5.274/coord/commands/store_migrate.py +105 -0
  10. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/db.py +14 -0
  11. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/sql.py +245 -18
  12. code_coordinator-0.5.274/coord/store_migrate.py +540 -0
  13. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/pyproject.toml +11 -0
  14. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/backends.py +54 -16
  15. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_sql_dialect.py +361 -17
  16. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_sqlite_connect_ratchet.py +25 -4
  17. code_coordinator-0.5.274/tests/test_store_migrate.py +580 -0
  18. code_coordinator-0.5.274/tests/test_write_parity.py +586 -0
  19. code_coordinator-0.5.274/tests/write_parity.py +1206 -0
  20. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.claude/commands/board.md +0 -0
  21. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.claude/commands/complete-session.md +0 -0
  22. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.claude/commands/coordinator.md +0 -0
  23. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.githooks/_lib.sh +0 -0
  24. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.githooks/post-checkout +0 -0
  25. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.githooks/post-commit +0 -0
  26. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.githooks/post-merge +0 -0
  27. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  28. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/coord-ci-acceptance.yml +0 -0
  29. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/workflows/auto-release.yml +0 -0
  30. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/workflows/cargo-test.yml +0 -0
  31. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/workflows/publish.yml +0 -0
  32. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.github/workflows/release-tui.yml +0 -0
  33. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/.gitignore +0 -0
  34. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/CLAUDE.md +0 -0
  35. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/GOAL.md +0 -0
  36. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/LICENSE +0 -0
  37. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/MANIFEST.in +0 -0
  38. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/README.md +0 -0
  39. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/dependency_links.txt +0 -0
  40. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/entry_points.txt +0 -0
  41. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/code_coordinator.egg-info/top_level.txt +0 -0
  42. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/__init__.py +0 -0
  43. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/_board_mapping.py +0 -0
  44. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/acceptance.py +0 -0
  45. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/acceptance_drivers.py +0 -0
  46. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/agent.py +0 -0
  47. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/agent_app.py +0 -0
  48. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/agent_update.py +0 -0
  49. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/agents/opencode/.gitignore +0 -0
  50. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/agents/opencode/agents/work.md +0 -0
  51. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/agents/opencode/routing.jsonc +0 -0
  52. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/approved_work.py +0 -0
  53. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/audit.py +0 -0
  54. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/auto_loop.py +0 -0
  55. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/block_log.py +0 -0
  56. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/board_bool_guard.py +0 -0
  57. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/board_schema.py +0 -0
  58. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/board_service.py +0 -0
  59. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/board_wire.py +0 -0
  60. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/brain.py +0 -0
  61. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/branch_model.py +0 -0
  62. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/bug_intake.py +0 -0
  63. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/cargo_cache.py +0 -0
  64. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/ci_fix.py +0 -0
  65. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/ci_github.py +0 -0
  66. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/ci_gitlab.py +0 -0
  67. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/ci_store.py +0 -0
  68. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/claim.py +0 -0
  69. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/client.py +0 -0
  70. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/__init__.py +0 -0
  71. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/_common.py +0 -0
  72. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/acceptance.py +0 -0
  73. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/agent_ops.py +0 -0
  74. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/audit.py +0 -0
  75. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/chat.py +0 -0
  76. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/drive.py +0 -0
  79. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/drive_queue.py +0 -0
  80. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/gate_a.py +0 -0
  81. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/gates.py +0 -0
  82. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/issues.py +0 -0
  83. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/lifecycle.py +0 -0
  84. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/terminal.py +0 -0
  99. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/test_gate.py +0 -0
  100. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/commands/tui.py +0 -0
  101. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/comments.py +0 -0
  102. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/config.py +0 -0
  103. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/confirm_test.py +0 -0
  105. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/conflict_fix.py +0 -0
  106. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dao.py +0 -0
  107. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dashboard/__init__.py +0 -0
  108. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dashboard/fixture.py +0 -0
  109. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dashboard/index.html +0 -0
  110. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dashboard/server.py +0 -0
  111. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dashboard/terminal.py +0 -0
  112. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/decomposition_chat.py +0 -0
  114. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/README.md +0 -0
  115. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-agent.service +0 -0
  116. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-db-backup.service +0 -0
  117. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-db-backup.sh +0 -0
  118. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-db-backup.timer +0 -0
  119. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-drive-queue.service +0 -0
  120. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-drive-queue.timer +0 -0
  121. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-failure-notify.service +0 -0
  122. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-fleet-watchdog.service +0 -0
  123. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  124. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-notify.service +0 -0
  125. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-notify.timer +0 -0
  126. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-release-propagate.service +0 -0
  127. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-release-propagate.timer +0 -0
  128. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-release-window.service +0 -0
  129. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-release-window.timer +0 -0
  130. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-serve.service +0 -0
  131. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-web-dist-build.service +0 -0
  132. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-web-dist-build.timer +0 -0
  133. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy/coord-web.service +0 -0
  134. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy_manifest.py +0 -0
  135. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deploy_units.py +0 -0
  136. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/deps.py +0 -0
  137. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/diagnose.py +0 -0
  138. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dispatch.py +0 -0
  139. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/dist_name.py +0 -0
  140. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/drive.py +0 -0
  141. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/drive_queue.py +0 -0
  142. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/drive_state.py +0 -0
  143. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/events.py +0 -0
  144. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/failure_class.py +0 -0
  145. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/filelock.py +0 -0
  146. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/fleet_config_health.py +0 -0
  147. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/forge_availability.py +0 -0
  148. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/freshness.py +0 -0
  149. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/gate_a.py +0 -0
  150. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/gate_b.py +0 -0
  151. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/gate_snapshot.py +0 -0
  152. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/gates.py +0 -0
  153. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/github_ops.py +0 -0
  154. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/github_throttle.py +0 -0
  155. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/goal.py +0 -0
  156. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/graph_health.py +0 -0
  157. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/__init__.py +0 -0
  158. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/aggregate.py +0 -0
  159. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/__init__.py +0 -0
  160. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/agent_install.py +0 -0
  161. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/cargo_targets.py +0 -0
  162. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/claude_binary.py +0 -0
  163. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/coord_web_ci_pin.py +0 -0
  164. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/deploy_lane_facts.py +0 -0
  165. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/disk.py +0 -0
  166. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/fleet_board.py +0 -0
  167. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  168. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/fleet_phantom.py +0 -0
  169. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/fleet_unit_drift.py +0 -0
  170. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/graph.py +0 -0
  171. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/graphify_cli.py +0 -0
  172. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/index_lock.py +0 -0
  173. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/issues_sync_staleness.py +0 -0
  174. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/plan_usage.py +0 -0
  175. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/release_cordon.py +0 -0
  176. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/repo_state.py +0 -0
  177. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/spawned_coord.py +0 -0
  178. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/stalled_pipeline.py +0 -0
  179. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/timer_active.py +0 -0
  180. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/toolchain.py +0 -0
  181. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/unit_drift.py +0 -0
  182. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/unit_enablement.py +0 -0
  183. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/checks/worktrees.py +0 -0
  184. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/cli.py +0 -0
  185. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/context.py +0 -0
  186. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/fleet_snapshot.py +0 -0
  187. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/models.py +0 -0
  188. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/pypi.py +0 -0
  189. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/registry.py +0 -0
  190. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/render.py +0 -0
  191. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/health/units.py +0 -0
  192. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/hooks.py +0 -0
  193. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/housekeeping.py +0 -0
  194. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/interactive.py +0 -0
  195. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/issue_store.py +0 -0
  196. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/issues_sync_status.py +0 -0
  197. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/liveness_auditor.py +0 -0
  198. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/machine_pause.py +0 -0
  199. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/merge_queue.py +0 -0
  200. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/milestone_chat.py +0 -0
  201. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/milestone_dispatch.py +0 -0
  202. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/milestone_gate.py +0 -0
  203. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/milestone_order.py +0 -0
  204. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/mock_author.py +0 -0
  205. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/models.py +0 -0
  206. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/network.py +0 -0
  207. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/new_issue_chat.py +0 -0
  208. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/__init__.py +0 -0
  209. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/baseline.py +0 -0
  210. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/cli.py +0 -0
  211. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/collect.py +0 -0
  212. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/digest.py +0 -0
  213. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/models.py +0 -0
  214. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/predicate.py +0 -0
  215. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/service.py +0 -0
  216. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/store.py +0 -0
  217. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notifier/transport.py +0 -0
  218. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/notify.py +0 -0
  219. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/openapi.py +0 -0
  220. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/overlap_fence.py +0 -0
  221. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/overlap_predict.py +0 -0
  222. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/parentage.py +0 -0
  223. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/parentage_github.py +0 -0
  224. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/pipeline.py +0 -0
  225. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/plan_parser.py +0 -0
  226. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/plans.py +0 -0
  227. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/platform_paths.py +0 -0
  228. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/portal_bridge.py +0 -0
  229. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/portal_store.py +0 -0
  230. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/portal_sync.py +0 -0
  231. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/pr_body_lint.py +0 -0
  232. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/prereqs.py +0 -0
  233. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/progress.py +0 -0
  234. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/providers/__init__.py +0 -0
  235. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/providers/base.py +0 -0
  236. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/providers/claude.py +0 -0
  237. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/providers/claude_pty.py +0 -0
  238. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/providers/opencode.py +0 -0
  239. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/queue_diagnose.py +0 -0
  240. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/reconcile.py +0 -0
  241. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/reconcile_tick.py +0 -0
  242. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/refine_chat.py +0 -0
  243. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/release_cordon.py +0 -0
  244. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/release_propagate.py +0 -0
  245. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/release_verify.py +0 -0
  246. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/release_window.py +0 -0
  247. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/repo_edit.py +0 -0
  248. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/repo_onboard.py +0 -0
  249. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/reports.py +0 -0
  250. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/revalidate.py +0 -0
  251. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/review.py +0 -0
  252. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/scorecard.py +0 -0
  253. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/self_health.py +0 -0
  254. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/serve_app.py +0 -0
  255. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  256. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  257. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  258. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  259. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  260. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/portal-followup/SKILL.md +0 -0
  261. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/release-now/SKILL.md +0 -0
  262. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  263. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  264. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/skills/update-issue/SKILL.md +0 -0
  265. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/smoke.py +0 -0
  266. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/spend_ceiling.py +0 -0
  267. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/split_work.py +0 -0
  268. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/stage_projection.py +0 -0
  269. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/state.py +0 -0
  270. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/test_author.py +0 -0
  271. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/test_chat.py +0 -0
  272. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/test_orchestrator.py +0 -0
  273. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/test_report.py +0 -0
  274. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/tui_release.py +0 -0
  275. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/usage.py +0 -0
  276. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/usage_limits.py +0 -0
  277. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/usage_rollup.py +0 -0
  278. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coord/worker_events.py +0 -0
  279. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/coordinator.example.yml +0 -0
  280. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-agent.service +0 -0
  281. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-db-backup.service +0 -0
  282. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-db-backup.sh +0 -0
  283. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-db-backup.timer +0 -0
  284. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-drive-queue.service +0 -0
  285. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-drive-queue.timer +0 -0
  286. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-failure-notify.service +0 -0
  287. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-failure-notify.sh +0 -0
  288. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-fleet-watchdog.service +0 -0
  289. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-fleet-watchdog.timer +0 -0
  290. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-notify.service +0 -0
  291. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-notify.timer +0 -0
  292. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-release-propagate.service +0 -0
  293. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-release-propagate.timer +0 -0
  294. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-release-window.service +0 -0
  295. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-release-window.timer +0 -0
  296. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-serve.service +0 -0
  297. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-web-dist-build.service +0 -0
  298. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-web-dist-build.sh +0 -0
  299. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-web-dist-build.timer +0 -0
  300. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-web-rollback.sh +0 -0
  301. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/coord-web.service +0 -0
  302. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/deploy/node-shim.sh +0 -0
  303. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  304. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ADR_COORD_WEB_CI.md +0 -0
  305. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ADR_COORD_WEB_DIST.md +0 -0
  306. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/AGENT_OPERATIONS.md +0 -0
  307. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ARCHITECTURE.md +0 -0
  308. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ARCH_SECURITY_GATES.md +0 -0
  309. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/COCKPIT.md +0 -0
  310. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/CONTROL_CENTER.md +0 -0
  311. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/COST_DISCIPLINE.md +0 -0
  312. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/CROSS_PLATFORM.md +0 -0
  313. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/CUSTOMER_FACING_APPS.md +0 -0
  314. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/CUSTOMER_PORTAL.md +0 -0
  315. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/DRIVE_QUEUE.md +0 -0
  316. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/EPHEMERAL_WORKERS.md +0 -0
  317. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/FORGE_MIGRATION.md +0 -0
  318. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/GRAPHIFY_SETUP.md +0 -0
  319. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ISSUE_GUIDANCE.md +0 -0
  320. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/MAC_MINI.md +0 -0
  321. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  322. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/NOTIFIER.md +0 -0
  323. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/OPENCODE_VERIFICATION.md +0 -0
  324. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/OPERATING_GOTCHAS.md +0 -0
  325. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/OPERATOR_GUIDES.md +0 -0
  326. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/ORACLE_LOOP.md +0 -0
  327. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/PHONE_WEBAPP.md +0 -0
  328. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/PIPELINE_V2.md +0 -0
  329. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/PLATFORM_EVOLUTION.md +0 -0
  330. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/SECOND_BACKEND.md +0 -0
  331. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/STORE_SERVICE.md +0 -0
  332. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  333. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/WEB_CONTROL_CENTER.md +0 -0
  334. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/WSL_WINDOWS_WORKER.md +0 -0
  335. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/mocks/web/README.md +0 -0
  336. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/mocks/web/_tokens.css +0 -0
  337. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/mocks/web/issue-detail.html +0 -0
  338. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/mocks/web/pipeline-narrow.html +0 -0
  339. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/docs/mocks/web/pipeline-wide.html +0 -0
  340. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/graphify-out/.gitignore +0 -0
  341. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/install-agent.sh +0 -0
  342. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/audit_review_verdict_overrides.py +0 -0
  343. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  344. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/build-worker-image.sh +0 -0
  345. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/coordinator-machine.py +0 -0
  346. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/epic-down.sh +0 -0
  347. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/epic-up.sh +0 -0
  348. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/preflight.sh +0 -0
  349. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/provision-worker.sh +0 -0
  350. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  351. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  352. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/azure-workers/verify-github-token.sh +0 -0
  353. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/check_gh_argv_containment.py +0 -0
  354. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/codegen.py +0 -0
  355. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/coord-test-runner.sh +0 -0
  356. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/coord-venv-rollback.sh +0 -0
  357. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/drive-batch.sh +0 -0
  358. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/fleet_watchdog.py +0 -0
  359. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/gen_board_fixture.py +0 -0
  360. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/gen_mock_index.py +0 -0
  361. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/next_release_tag.py +0 -0
  362. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/run_tests_in_populated_home.sh +0 -0
  363. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/run_tests_without_gh.sh +0 -0
  364. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/smoke_437_interactive.py +0 -0
  365. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/verify_878_review_capture.py +0 -0
  366. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/verify_release_published.py +0 -0
  367. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/scripts/verify_release_wheel.py +0 -0
  368. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/setup.cfg +0 -0
  369. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/SMOKE_SET.md +0 -0
  370. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/__init__.py +0 -0
  371. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  372. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/contract.md +0 -0
  373. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/manifest.yml +0 -0
  374. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  375. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  376. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  377. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  378. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-37/conftest.py +0 -0
  379. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-37/contract.md +0 -0
  380. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-37/manifest.yml +0 -0
  381. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  382. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  383. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/contract.md +0 -0
  384. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/manifest.yml +0 -0
  385. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  386. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  387. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  388. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  389. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  390. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  391. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  392. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  393. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  394. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  395. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-51/contract.md +0 -0
  396. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  397. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  398. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-51/manifest.yml +0 -0
  399. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  400. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-51/tsconfig.json +0 -0
  401. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  402. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  403. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  404. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/contract.md +0 -0
  405. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  406. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/manifest.yml +0 -0
  407. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  408. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  409. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  410. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  411. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  412. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  413. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  414. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  415. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  416. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  417. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  418. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  419. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/contract.md +0 -0
  420. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  421. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/manifest.yml +0 -0
  422. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  423. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  424. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  425. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  426. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  427. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  428. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  429. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/conftest.py +0 -0
  430. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/board-pipeline-basic.json +0 -0
  431. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  432. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  433. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  434. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  435. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/all_pass.json +0 -0
  436. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  437. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/mixed_fail.json +0 -0
  438. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  439. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  440. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/skip.json +0 -0
  441. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/playwright/truncated.json +0 -0
  442. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  443. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  444. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  445. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  446. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  447. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  448. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  449. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  450. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_acceptance.py +0 -0
  451. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_acceptance_drivers.py +0 -0
  452. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent.py +0 -0
  453. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_api_error.py +0 -0
  454. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_app.py +0 -0
  455. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_branch_base.py +0 -0
  456. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_branch_capture.py +0 -0
  457. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_config_free_1712.py +0 -0
  458. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_deploy_units_endpoint.py +0 -0
  459. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_dirty_worktree.py +0 -0
  460. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  461. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_graph_self_heal.py +0 -0
  462. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_health_h3.py +0 -0
  463. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_idle_restart.py +0 -0
  464. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_push_failure.py +0 -0
  465. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_reap.py +0 -0
  466. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_repos_and_pull.py +0 -0
  467. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_restart_services_endpoint.py +0 -0
  468. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_skills_self_heal.py +0 -0
  469. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_startup_diagnostics.py +0 -0
  470. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_update.py +0 -0
  471. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_update_bluegreen.py +0 -0
  472. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_usage_limit.py +0 -0
  473. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_agent_zero_commit.py +0 -0
  474. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_ambient_home_isolation.py +0 -0
  475. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_approve_dependency_busy_2804.py +0 -0
  476. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_approve_reject_plan.py +0 -0
  477. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_approve_usage_gate.py +0 -0
  478. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_approved_work_2532.py +0 -0
  479. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_assignment_already_recorded_daemon.py +0 -0
  480. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_audit_log.py +0 -0
  481. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_audit_outcome.py +0 -0
  482. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_audit_query.py +0 -0
  483. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_auto_loop.py +0 -0
  484. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_auto_release_publish_2035.py +0 -0
  485. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_backend_selection.py +0 -0
  486. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_base_checkout_restore.py +0 -0
  487. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_block_log.py +0 -0
  488. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_cap_762.py +0 -0
  489. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_fixture.py +0 -0
  490. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_read_path.py +0 -0
  491. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_schema.py +0 -0
  492. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_service.py +0 -0
  493. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_state.py +0 -0
  494. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_board_wire.py +0 -0
  495. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_brain.py +0 -0
  496. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_branch_model.py +0 -0
  497. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_bug_intake.py +0 -0
  498. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_build_worker_image_env_update.py +0 -0
  499. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cargo_cache.py +0 -0
  500. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_check_gh_argv_containment.py +0 -0
  501. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_ci_acceptance_gate_1950.py +0 -0
  502. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_ci_fix.py +0 -0
  503. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_ci_gitlab.py +0 -0
  504. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_ci_parity_2091.py +0 -0
  505. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_ci_store.py +0 -0
  506. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_claim.py +0 -0
  507. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_claude_md_budget.py +0 -0
  508. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_acceptance.py +0 -0
  509. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_assign.py +0 -0
  510. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  511. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_assign_interactive_remote.py +0 -0
  512. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_assign_provider.py +0 -0
  513. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  514. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_audit.py +0 -0
  515. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_chat_continue.py +0 -0
  516. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_decide.py +0 -0
  517. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_diagnose_config_provenance.py +0 -0
  518. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_diagnose_forge_availability.py +0 -0
  519. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_diagnose_graph.py +0 -0
  520. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_diagnose_self.py +0 -0
  521. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_doctor.py +0 -0
  522. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_doctor_config_free_1801.py +0 -0
  523. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  524. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_drive.py +0 -0
  525. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_drive_queue.py +0 -0
  526. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_escalate.py +0 -0
  527. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_fix_headless_review.py +0 -0
  528. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_gate_a.py +0 -0
  529. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_install_drift.py +0 -0
  530. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_install_skills.py +0 -0
  531. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_issue_comment.py +0 -0
  532. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_issue_create_label.py +0 -0
  533. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_issue_reopen.py +0 -0
  534. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_issue_view_list.py +0 -0
  535. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_merge.py +0 -0
  536. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_assign.py +0 -0
  537. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_capture.py +0 -0
  538. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_chat_add_child.py +0 -0
  539. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_dispatch.py +0 -0
  540. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_gate_b.py +0 -0
  541. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_gate_c.py +0 -0
  542. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_order.py +0 -0
  543. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  544. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_milestone_ship.py +0 -0
  545. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_network.py +0 -0
  546. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_new_issue_chat.py +0 -0
  547. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_plans.py +0 -0
  548. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_portal.py +0 -0
  549. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_pr.py +0 -0
  550. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_pull_artifact.py +0 -0
  551. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_queue.py +0 -0
  552. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_reattach_sessions.py +0 -0
  553. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_refine_board.py +0 -0
  554. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_release_preflight.py +0 -0
  555. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_release_propagate.py +0 -0
  556. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_release_window.py +0 -0
  557. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_repo_2220.py +0 -0
  558. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  559. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_scorecard.py +0 -0
  560. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_set_review_findings.py +0 -0
  561. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_advisory_terminal.py +0 -0
  562. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_contested_tag.py +0 -0
  563. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_merge_queue.py +0 -0
  564. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_provider.py +0 -0
  565. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_review_finalizing.py +0 -0
  566. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_test_failed_tag.py +0 -0
  567. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_status_usage_limit.py +0 -0
  568. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_sync_comments_873.py +0 -0
  569. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_test_plan.py +0 -0
  570. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_track.py +0 -0
  571. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_tui_update.py +0 -0
  572. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cli_wait.py +0 -0
  573. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_client_base_install.py +0 -0
  574. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_commands_common.py +0 -0
  575. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_comments.py +0 -0
  576. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_completion_summary.py +0 -0
  577. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_config.py +0 -0
  578. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_config_acceptance.py +0 -0
  579. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_config_audit.py +0 -0
  580. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_config_pricing.py +0 -0
  581. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  582. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_config_usage_gate.py +0 -0
  583. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_confirm_test.py +0 -0
  584. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_conflict_fix.py +0 -0
  585. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_conflict_fix_semantic.py +0 -0
  586. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  587. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_test.py +0 -0
  588. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_test_runner_baseline.py +0 -0
  589. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_test_runner_populated_home.py +0 -0
  590. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_test_runner_routing.py +0 -0
  591. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_test_runner_toolchain.py +0 -0
  592. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_uat.py +0 -0
  593. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coord_web_sse_restart_live.py +0 -0
  594. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_coordinator_machine.py +0 -0
  595. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_cross_platform_imports.py +0 -0
  596. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dao.py +0 -0
  597. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dashboard.py +0 -0
  598. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dashboard_fixture.py +0 -0
  599. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dashboard_terminal.py +0 -0
  600. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dashboard_terminal_live.py +0 -0
  601. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_db.py +0 -0
  602. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dead_end.py +0 -0
  603. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_decomposition_chat.py +0 -0
  604. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_coord_db_backup.py +0 -0
  605. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_coord_web_dist.py +0 -0
  606. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_coord_web_rollback.py +0 -0
  607. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_drive_queue_unit.py +0 -0
  608. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_failure_notify_unit.py +0 -0
  609. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_manifest.py +0 -0
  610. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_notify_unit.py +0 -0
  611. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_units_lane.py +0 -0
  612. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deploy_web_unit.py +0 -0
  613. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_deps.py +0 -0
  614. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_diagnose.py +0 -0
  615. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dispatch.py +0 -0
  616. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dispatch_target_validation.py +0 -0
  617. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_dist_name.py +0 -0
  618. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_done_housekeeping.py +0 -0
  619. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive.py +0 -0
  620. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_queue.py +0 -0
  621. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_queue_blocked_rendering.py +0 -0
  622. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_queue_launch_argv.py +0 -0
  623. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  624. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_queue_roll_pending.py +0 -0
  625. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  626. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_state.py +0 -0
  627. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_drive_tmux.py +0 -0
  628. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_epic_up_capability_detection.py +0 -0
  629. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  630. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_epic_up_image_provenance.py +0 -0
  631. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_errors.py +0 -0
  632. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_events.py +0 -0
  633. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_failure_class.py +0 -0
  634. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_filelock.py +0 -0
  635. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  636. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_fix_of_force_override.py +0 -0
  637. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_fleet_config_health.py +0 -0
  638. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_fleet_health_probes.py +0 -0
  639. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_fleet_health_snapshot.py +0 -0
  640. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_fleet_watchdog.py +0 -0
  641. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_forge_availability.py +0 -0
  642. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_freshness.py +0 -0
  643. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_gate_a.py +0 -0
  644. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_gate_b.py +0 -0
  645. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_gate_snapshot_staleness.py +0 -0
  646. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_gates.py +0 -0
  647. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  648. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_gen_mock_index.py +0 -0
  649. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_generated_rust_fixture.py +0 -0
  650. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_generated_types_fixture.py +0 -0
  651. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_github_ops.py +0 -0
  652. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_github_throttle.py +0 -0
  653. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_goal.py +0 -0
  654. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_graph_health.py +0 -0
  655. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_graph_selfheal_absent_2237.py +0 -0
  656. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_handoff.py +0 -0
  657. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_checks.py +0 -0
  658. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_cli.py +0 -0
  659. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_cli_graph.py +0 -0
  660. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_config.py +0 -0
  661. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_context.py +0 -0
  662. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_coord_web_ci_pin.py +0 -0
  663. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_deploy_lane_facts.py +0 -0
  664. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_fix.py +0 -0
  665. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_incident_regression.py +0 -0
  666. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_issues_sync_staleness.py +0 -0
  667. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_pypi.py +0 -0
  668. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_registry.py +0 -0
  669. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_release_cordon_probe.py +0 -0
  670. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_timer_active.py +0 -0
  671. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_toolchain.py +0 -0
  672. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_unit_drift.py +0 -0
  673. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_health_unit_enablement.py +0 -0
  674. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_hooks.py +0 -0
  675. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_human_attended_437.py +0 -0
  676. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_init.py +0 -0
  677. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_integration.py +0 -0
  678. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_briefing_echo.py +0 -0
  679. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_pane_log_2541.py +0 -0
  680. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_prefill_state.py +0 -0
  681. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_session_relaunch.py +0 -0
  682. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_test_verdict_backstop.py +0 -0
  683. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_token_attribution.py +0 -0
  684. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_interactive_worktree.py +0 -0
  685. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_issue_store_seam.py +0 -0
  686. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_issues_sync_status.py +0 -0
  687. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_liveness_auditor.py +0 -0
  688. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_liveness_notify.py +0 -0
  689. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_lock_contention_ratchet.py +0 -0
  690. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_machine_pause.py +0 -0
  691. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_merge_queue.py +0 -0
  692. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_merge_verify.py +0 -0
  693. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_milestone_chat.py +0 -0
  694. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_milestone_dispatch.py +0 -0
  695. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_milestone_gate.py +0 -0
  696. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_milestone_order.py +0 -0
  697. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_milestone_seam.py +0 -0
  698. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_mock_author.py +0 -0
  699. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_model_tiering.py +0 -0
  700. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_models.py +0 -0
  701. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_models_config_labels.py +0 -0
  702. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_needs_attention.py +0 -0
  703. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_network.py +0 -0
  704. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_new_issue_chat.py +0 -0
  705. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_next_release_tag.py +0 -0
  706. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_node_shim.py +0 -0
  707. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_baseline.py +0 -0
  708. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_cli.py +0 -0
  709. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_collect.py +0 -0
  710. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_config.py +0 -0
  711. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_drive_seam.py +0 -0
  712. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_isolation.py +0 -0
  713. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_predicate.py +0 -0
  714. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_quiet_hours.py +0 -0
  715. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notifier_service.py +0 -0
  716. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notify.py +0 -0
  717. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_notify_drain.py +0 -0
  718. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_openapi.py +0 -0
  719. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_operational_defaults.py +0 -0
  720. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_overlap_fence.py +0 -0
  721. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_overlap_predict.py +0 -0
  722. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_packaged_deploy_units.py +0 -0
  723. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_parentage.py +0 -0
  724. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_paste_landed.py +0 -0
  725. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  726. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_pipeline.py +0 -0
  727. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_plan_followup_approve_plan_command.py +0 -0
  728. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_plan_followup_pr_command.py +0 -0
  729. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_plan_followup_review_command.py +0 -0
  730. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_plan_only.py +0 -0
  731. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_plan_parser.py +0 -0
  732. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_platform_paths.py +0 -0
  733. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_portal_bridge.py +0 -0
  734. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_portal_config.py +0 -0
  735. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_portal_store.py +0 -0
  736. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_portal_sync.py +0 -0
  737. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_pr_body_lint.py +0 -0
  738. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_prereqs.py +0 -0
  739. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_production_db_guard.py +0 -0
  740. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_progress.py +0 -0
  741. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_provider_seam.py +0 -0
  742. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_providers.py +0 -0
  743. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_providers_config_labels.py +0 -0
  744. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_providers_pty.py +0 -0
  745. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_quiet_hours.py +0 -0
  746. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_quiet_hours_store_2146.py +0 -0
  747. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reap_merged_sessions.py +0 -0
  748. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reap_stale_interactive_tick.py +0 -0
  749. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile.py +0 -0
  750. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_branch.py +0 -0
  751. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_completions.py +0 -0
  752. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  753. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_merges.py +0 -0
  754. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_no_agent_record.py +0 -0
  755. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_tick.py +0 -0
  756. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reconcile_usage_limit_done.py +0 -0
  757. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_refine_chat.py +0 -0
  758. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_cordon_2101.py +0 -0
  759. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  760. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_cordon_deadlock_2240.py +0 -0
  761. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_cordon_stuck_2490.py +0 -0
  762. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_propagate.py +0 -0
  763. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_propagate_threshold.py +0 -0
  764. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_roll_between_legs_2854.py +0 -0
  765. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_roll_window_handoff.py +0 -0
  766. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_unified_1242.py +0 -0
  767. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_verify.py +0 -0
  768. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_release_window.py +0 -0
  769. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_remote_auto_prune.py +0 -0
  770. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_remote_interactive_reaper.py +0 -0
  771. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_repo_add.py +0 -0
  772. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_repo_edit_2220.py +0 -0
  773. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_repo_graph_fleet_2237.py +0 -0
  774. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_repo_onboard_2220.py +0 -0
  775. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_report_result_push.py +0 -0
  776. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_reports.py +0 -0
  777. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_retry.py +0 -0
  778. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_retry_advisory_1606.py +0 -0
  779. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_retry_type_1636.py +0 -0
  780. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_revalidate.py +0 -0
  781. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review.py +0 -0
  782. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_end_review_without_verdict.py +0 -0
  783. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_parse_failure_diagnostic.py +0 -0
  784. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_reaffirm.py +0 -0
  785. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_state.py +0 -0
  786. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_verdict_backstop.py +0 -0
  787. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_verdict_override_audit.py +0 -0
  788. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_verdict_relay.py +0 -0
  789. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_review_zero_commits.py +0 -0
  790. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_scoped_review_wiring.py +0 -0
  791. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_scorecard.py +0 -0
  792. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_self_health.py +0 -0
  793. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_serve.py +0 -0
  794. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_serve_app_board_trim.py +0 -0
  795. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_session.py +0 -0
  796. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_slice_issue_attribution.py +0 -0
  797. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_smoke.py +0 -0
  798. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_smoke_live_checkout_restore.py +0 -0
  799. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_smoke_workflow.py +0 -0
  800. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_spend_ceiling.py +0 -0
  801. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_spend_ceiling_coordinator.py +0 -0
  802. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_split.py +0 -0
  803. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_split_work.py +0 -0
  804. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_stage_projection.py +0 -0
  805. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_stale_busy_reviewer_697.py +0 -0
  806. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_stalled_pipeline.py +0 -0
  807. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_state.py +0 -0
  808. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_state_review_findings_daemon.py +0 -0
  809. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_status_fleet_footer.py +0 -0
  810. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_stop_1567.py +0 -0
  811. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_store_contract.py +0 -0
  812. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_stuck.py +0 -0
  813. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  814. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_terminal_command.py +0 -0
  815. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_test_author.py +0 -0
  816. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_test_chat.py +0 -0
  817. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_test_orchestrator.py +0 -0
  818. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_test_report.py +0 -0
  819. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_test_verdict_parsing.py +0 -0
  820. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_test_verdict_transcript_floor.py +0 -0
  821. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_text_io_encoding_audit.py +0 -0
  822. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_thin_client_board_audit.py +0 -0
  823. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_thin_client_config_load_1080.py +0 -0
  824. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_thin_client_daemon_routing_906.py +0 -0
  825. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_tmux_host.py +0 -0
  826. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_tmux_session.py +0 -0
  827. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_transcript_floor.py +0 -0
  828. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_usage.py +0 -0
  829. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_usage_limits.py +0 -0
  830. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_usage_rollup.py +0 -0
  831. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_venv_live_install_2121.py +0 -0
  832. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_version_single_source.py +0 -0
  833. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_watch.py +0 -0
  834. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  835. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worker_env_venv_isolation.py +0 -0
  836. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worker_events.py +0 -0
  837. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worker_image_pin_sync.py +0 -0
  838. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worker_safety.py +0 -0
  839. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worker_test_scoping.py +0 -0
  840. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worktree.py +0 -0
  841. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  842. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/Cargo.lock +0 -0
  843. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/Cargo.toml +0 -0
  844. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/cargo-config-local-quadraui.toml.example +0 -0
  845. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/approved.rs +0 -0
  846. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/audit.rs +0 -0
  847. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/chat.rs +0 -0
  848. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/data.rs +0 -0
  849. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/dialogs.rs +0 -0
  850. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/doc_tabs.rs +0 -0
  851. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/drive.rs +0 -0
  852. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/drive_queue.rs +0 -0
  853. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/escalation.rs +0 -0
  854. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/events.rs +0 -0
  855. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/fixtures.rs +0 -0
  856. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/fleet_health.rs +0 -0
  857. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/fleet_sessions.rs +0 -0
  858. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/fleet_terminals.rs +0 -0
  859. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/format.rs +0 -0
  860. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/milestone_dag.rs +0 -0
  861. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/mod.rs +0 -0
  862. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/msv.rs +0 -0
  863. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/pipeline.rs +0 -0
  864. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/plans.rs +0 -0
  865. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/render.rs +0 -0
  866. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/reports.rs +0 -0
  867. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/sessions.rs +0 -0
  868. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/settings_ui.rs +0 -0
  869. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/sidebar.rs +0 -0
  870. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/terminal.rs +0 -0
  871. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/tests.rs +0 -0
  872. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/types/generated.rs +0 -0
  873. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/types.rs +0 -0
  874. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/app/workspace.rs +0 -0
  875. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/bin/gtk.rs +0 -0
  876. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/commands.rs +0 -0
  877. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/lib.rs +0 -0
  878. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/main.rs +0 -0
  879. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/src/settings.rs +0 -0
  880. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/tests/acceptance.rs +0 -0
  881. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/tui/tests/cli.rs +0 -0
  882. {code_coordinator-0.5.272 → code_coordinator-0.5.274}/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.274
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.274
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
@@ -141,6 +141,7 @@ coord/split_work.py
141
141
  coord/sql.py
142
142
  coord/stage_projection.py
143
143
  coord/state.py
144
+ coord/store_migrate.py
144
145
  coord/test_author.py
145
146
  coord/test_chat.py
146
147
  coord/test_orchestrator.py
@@ -181,6 +182,7 @@ coord/commands/scorecard.py
181
182
  coord/commands/sessions.py
182
183
  coord/commands/setup.py
183
184
  coord/commands/status.py
185
+ coord/commands/store_migrate.py
184
186
  coord/commands/terminal.py
185
187
  coord/commands/test_gate.py
186
188
  coord/commands/tui.py
@@ -724,6 +726,7 @@ tests/test_state_review_findings_daemon.py
724
726
  tests/test_status_fleet_footer.py
725
727
  tests/test_stop_1567.py
726
728
  tests/test_store_contract.py
729
+ tests/test_store_migrate.py
727
730
  tests/test_stuck.py
728
731
  tests/test_stuck_test_state_watchdog_2803.py
729
732
  tests/test_terminal_command.py
@@ -754,6 +757,8 @@ tests/test_worker_safety.py
754
757
  tests/test_worker_test_scoping.py
755
758
  tests/test_worktree.py
756
759
  tests/test_worktree_rmtree_chokepoint.py
760
+ tests/test_write_parity.py
761
+ tests/write_parity.py
757
762
  tests/acceptance/ms-33/audit_1039.rs
758
763
  tests/acceptance/ms-33/contract.md
759
764
  tests/acceptance/ms-33/manifest.yml
@@ -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
@@ -77,6 +77,7 @@
77
77
  "coord/commands/sessions.py",
78
78
  "coord/commands/setup.py",
79
79
  "coord/commands/status.py",
80
+ "coord/commands/store_migrate.py",
80
81
  "coord/commands/terminal.py",
81
82
  "coord/commands/test_gate.py",
82
83
  "coord/commands/tui.py",
@@ -251,6 +252,7 @@
251
252
  "coord/sql.py",
252
253
  "coord/stage_projection.py",
253
254
  "coord/state.py",
255
+ "coord/store_migrate.py",
254
256
  "coord/test_author.py",
255
257
  "coord/test_chat.py",
256
258
  "coord/test_orchestrator.py",
@@ -796,6 +798,7 @@
796
798
  "tests/test_status_fleet_footer.py",
797
799
  "tests/test_stop_1567.py",
798
800
  "tests/test_store_contract.py",
801
+ "tests/test_store_migrate.py",
799
802
  "tests/test_stuck.py",
800
803
  "tests/test_stuck_test_state_watchdog_2803.py",
801
804
  "tests/test_terminal_command.py",
@@ -826,6 +829,8 @@
826
829
  "tests/test_worker_test_scoping.py",
827
830
  "tests/test_worktree.py",
828
831
  "tests/test_worktree_rmtree_chokepoint.py",
832
+ "tests/test_write_parity.py",
833
+ "tests/write_parity.py",
829
834
  "tui/Cargo.lock",
830
835
  "tui/Cargo.toml",
831
836
  "tui/cargo-config-local-quadraui.toml.example",
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.272",
2
+ "tag": "0.5.274",
3
3
  "distance": 0,
4
- "node": "g86d2609016c406aeea4b99ed80b0eae4e2963c25",
4
+ "node": "g431089da1ef90b647a608a440d189de80f9bac42",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-28"
@@ -147,6 +147,7 @@ from coord.commands.release import release_group, release_preflight
147
147
  # #2220: `coord repo add` / `coord repo doctor` — onboarding a repo, and
148
148
  # verifying it actually happened across all five layers.
149
149
  from coord.commands.repo import repo_group
150
+ from coord.commands.store_migrate import migrate_to_postgres
150
151
  from coord.commands.plan_followup import (
151
152
  _dispatch_followup, # noqa: F401 — re-exported for tests
152
153
  approve_plan,
@@ -491,6 +492,7 @@ main.add_command(release_preflight)
491
492
  main.add_command(release_group)
492
493
  # #2220: repo onboarding + its verifier.
493
494
  main.add_command(repo_group)
495
+ main.add_command(migrate_to_postgres)
494
496
  main.add_command(tui_group)
495
497
 
496
498
 
@@ -0,0 +1,105 @@
1
+ """``coord migrate-to-postgres`` -- one-shot import of an existing SQLite
2
+ ``coord.db`` into the Postgres store #827's ``store:`` config seam names
3
+ (#828 second half). See ``coord.store_migrate`` for the actual audit/copy
4
+ logic this command is a thin CLI wrapper around.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from pathlib import Path
10
+
11
+ import click
12
+
13
+ from coord import db as coord_db
14
+ from coord import sql
15
+ from coord.store_migrate import ImportAborted, run_import
16
+
17
+
18
+ @click.command(
19
+ "migrate-to-postgres",
20
+ help=(
21
+ "Import an existing SQLite coord.db into the Postgres store configured "
22
+ "by coordinator.yml's store: block (#828). Audits referential integrity "
23
+ "and type-affinity drift before writing anything."
24
+ ),
25
+ )
26
+ @click.option(
27
+ "--source",
28
+ "source_path",
29
+ type=click.Path(path_type=Path),
30
+ default=None,
31
+ help="Path to the source coord.db (default: this install's DB_PATH).",
32
+ )
33
+ @click.option(
34
+ "--dsn",
35
+ default=None,
36
+ help="Target Postgres DSN (default: coordinator.yml's store.dsn).",
37
+ )
38
+ @click.option(
39
+ "--force",
40
+ is_flag=True,
41
+ help="Wipe and re-import any target tables that already have rows (default: refuse).",
42
+ )
43
+ @click.option(
44
+ "--dry-run",
45
+ is_flag=True,
46
+ help="Audit the source and report row counts without opening or writing the target.",
47
+ )
48
+ def migrate_to_postgres(
49
+ source_path: Path | None, dsn: str | None, force: bool, dry_run: bool
50
+ ) -> None:
51
+ source_path = source_path or coord_db.DB_PATH
52
+ if dsn is None and not dry_run:
53
+ target = coord_db._resolve_store_target()
54
+ if not target.dsn:
55
+ raise click.ClickException(
56
+ "no --dsn given and coordinator.yml has no store.dsn configured -- "
57
+ "pass --dsn explicitly, or set store.backend: postgres / store.dsn "
58
+ "in coordinator.yml first (#827)."
59
+ )
60
+ dsn = target.dsn
61
+
62
+ click.echo(f"Source: {source_path}")
63
+ # Never echo the raw DSN -- it routinely embeds a password
64
+ # (`store.dsn`'s plain-string shape, coord/config.py), and this command's
65
+ # stdout is exactly the kind of text that can end up in a log or a
66
+ # GitHub comment (coord.db._migrate_if_needed's docstring states the
67
+ # policy this follows). sql.redact_dsn() prints host/dbname only.
68
+ target_line = sql.redact_dsn(dsn) if dsn else "(dry-run -- target is never opened)"
69
+ click.echo(f"Target: {target_line}")
70
+
71
+ try:
72
+ report = run_import(sqlite_path=source_path, dsn=dsn or "", force=force, dry_run=dry_run)
73
+ except ImportAborted as exc:
74
+ raise click.ClickException(str(exc)) from exc
75
+
76
+ click.echo()
77
+ if report.dry_run:
78
+ # The target is never opened for a dry run, so TableReport.target_rows
79
+ # is a placeholder 0 -- printing a source/target/status table here
80
+ # would read every table as a false "MISMATCH". Report source counts
81
+ # only; the audits (referential integrity, type affinity) already ran
82
+ # and would have raised ImportAborted above if either found anything.
83
+ click.echo(f"{'table':<30} {'source rows':>12}")
84
+ for t in report.tables:
85
+ click.echo(f"{t.table:<30} {t.source_rows:>12}")
86
+ click.echo(
87
+ "\nAudits passed (referential integrity, type affinity). "
88
+ "Dry run -- no target opened, no rows written."
89
+ )
90
+ return
91
+
92
+ click.echo(f"{'table':<30} {'source':>10} {'target':>10} status")
93
+ all_ok = True
94
+ for t in report.tables:
95
+ status = "OK" if t.ok else "MISMATCH"
96
+ if not t.ok:
97
+ all_ok = False
98
+ click.echo(f"{t.table:<30} {t.source_rows:>10} {t.target_rows:>10} {status}")
99
+
100
+ if not all_ok:
101
+ raise click.ClickException(
102
+ "row-count parity mismatch after import -- see table above; the target "
103
+ "was written but does not match the source row-for-row"
104
+ )
105
+ click.echo("\nImport complete: row-count parity confirmed for every table.")
@@ -361,6 +361,20 @@ def _open_postgres(dsn: str) -> Any:
361
361
  return conn
362
362
 
363
363
 
364
+ def open_postgres_connection(dsn: str) -> Any:
365
+ """Public entry point onto :func:`_open_postgres` for tooling that needs
366
+ a fully-migrated Postgres connection outside the ``get_connection()``
367
+ singleton -- today, only ``coord.store_migrate``'s importer (#828), which
368
+ opens a target that may not (yet) be the DSN this process's own
369
+ ``coordinator.yml`` names, so it calls this directly with whatever DSN
370
+ the operator gave it rather than going through :func:`get_connection`'s
371
+ config-resolution path. Same guarantees as every other caller of
372
+ :func:`_open_postgres`: refuses under pytest, and runs the same schema
373
+ creation/migration path SQLite gets (#827 item 3).
374
+ """
375
+ return _open_postgres(dsn)
376
+
377
+
364
378
  # #2752: a clean, tagged release is always exactly "X.Y.Z" -- setuptools_scm
365
379
  # only emits anything else (a ".devN+g<sha>" local/dev suffix, a bare
366
380
  # "0+unknown" when no distribution resolves at all, or git-describe's
@@ -46,8 +46,10 @@ text for the same intent.
46
46
 
47
47
  from __future__ import annotations
48
48
 
49
+ import re
49
50
  from pathlib import Path
50
51
  from typing import Any, Iterable, Sequence
52
+ from urllib.parse import urlsplit, urlunsplit
51
53
 
52
54
  # ── dialects ──────────────────────────────────────────────────────────────
53
55
  #
@@ -71,6 +73,92 @@ class UnsupportedDialectError(ValueError):
71
73
  """Raised when a connection's driver module maps to no known dialect."""
72
74
 
73
75
 
76
+ #: What to tell a caller who hit a Postgres codepath without the extra
77
+ #: installed -- mirrors ``coord.commands._common.SERVER_EXTRA_INSTALL_HINT``'s
78
+ #: shape for the ``[server]`` extra.
79
+ POSTGRES_EXTRA_INSTALL_HINT = "pip install 'code-coordinator[postgres]'"
80
+
81
+
82
+ # Libpq keyword=value DSN tokens: ``key=value`` or ``key='quoted value'``
83
+ # (single-quoted values may escape ``\'`` and ``\\`` per libpq's own
84
+ # grammar). Used only by :func:`redact_dsn` below.
85
+ _DSN_KV_RE = re.compile(r"(\w+)\s*=\s*('(?:\\.|[^'\\])*'|\S+)")
86
+
87
+
88
+ def redact_dsn(dsn: str) -> str:
89
+ """*dsn* with every credential-bearing field removed -- safe to print,
90
+ log, or post as a GitHub comment.
91
+
92
+ A Postgres DSN routinely embeds ``user:password@host`` (URI form,
93
+ ``postgresql://user:pass@host:port/db``) or ``user=... password=...``
94
+ (libpq keyword=value form, ``host=... dbname=... user=... password=...``)
95
+ -- ``coord/db.py``'s ``_migrate_if_needed`` docstring already states the
96
+ policy this exists to satisfy: a DSN must "deliberately never" appear in
97
+ text that "can end up in a log or a GitHub comment", since agent failure
98
+ reports post their captured stdout/stderr verbatim. Every caller that
99
+ would otherwise echo a configured ``store.dsn`` (e.g. ``coord
100
+ migrate-to-postgres``'s ``--dsn`` echo) must route through this first.
101
+
102
+ Returns host/dbname only (port too, when the DSN specifies one) -- not a
103
+ masked-but-recognizable form, so nothing of the credential survives even
104
+ truncated. Handles both DSN shapes; an unparseable field is rendered as
105
+ ``?`` rather than raising, since this exists for a diagnostic message,
106
+ not validation -- a malformed DSN should fail *later*, at
107
+ :func:`connect`, with a real error naming what's wrong.
108
+ """
109
+ stripped = dsn.strip()
110
+ if "://" in stripped:
111
+ parts = urlsplit(stripped)
112
+ host = parts.hostname or "?"
113
+ if parts.port:
114
+ host = f"{host}:{parts.port}"
115
+ dbname = parts.path.lstrip("/") or "?"
116
+ return urlunsplit((parts.scheme, host, dbname, "", ""))
117
+
118
+ def _unquote(value: str) -> str:
119
+ if len(value) >= 2 and value[0] == "'" and value[-1] == "'":
120
+ return value[1:-1].replace("\\'", "'").replace("\\\\", "\\")
121
+ return value
122
+
123
+ fields = {key: _unquote(value) for key, value in _DSN_KV_RE.findall(stripped)}
124
+ host = fields.get("host", "?")
125
+ if fields.get("port"):
126
+ host = f"{host}:{fields['port']}"
127
+ dbname = fields.get("dbname", "?")
128
+ return f"host={host} dbname={dbname}"
129
+
130
+
131
+ def _import_psycopg() -> Any:
132
+ """Import ``psycopg``, translating its absence into an actionable message
133
+ (#2886).
134
+
135
+ ``psycopg`` is an optional dependency -- the ``postgres`` extra -- never a
136
+ base or ``[dev]`` one (see ``pyproject.toml``'s ``[project.optional-
137
+ dependencies]``): every existing SQLite deployment must keep working
138
+ without ever pulling it in. Hitting this on an install that never asked
139
+ for Postgres is therefore the expected, common case, not a bug -- so
140
+ every Postgres call site in this module that needs the driver
141
+ (:func:`connect`, :func:`row_factory_for`, :func:`driver_error`) routes
142
+ its import through here rather than a bare ``import psycopg``, so the
143
+ failure names the extra to install instead of surfacing a raw
144
+ ``ModuleNotFoundError: No module named 'psycopg'`` traceback.
145
+
146
+ :func:`driver_errors` deliberately does NOT route through here -- it
147
+ degrades silently to ``(sqlite3.Error,)`` when psycopg is absent (that is
148
+ its whole contract), so it keeps its own bare ``import psycopg`` inside a
149
+ caught ``try/except ImportError`` rather than raising through this
150
+ helper's message just to swallow it unread.
151
+ """
152
+ try:
153
+ import psycopg # noqa: PLC0415 -- optional dep, see docstring
154
+ except ImportError as exc: # ModuleNotFoundError is a subclass
155
+ raise ModuleNotFoundError(
156
+ "the Postgres backend needs the `psycopg` driver, which is not "
157
+ f"installed. Install it with: {POSTGRES_EXTRA_INSTALL_HINT}"
158
+ ) from exc
159
+ return psycopg
160
+
161
+
74
162
  def detect_dialect(conn: Any) -> str:
75
163
  """Identify *conn*'s SQL dialect from its concrete connection type.
76
164
 
@@ -136,7 +224,7 @@ def connect(
136
224
  superseded #2766 decision note.
137
225
 
138
226
  **Postgres** (``dsn`` required): ``psycopg.connect(dsn)``. ``psycopg`` is
139
- an optional dependency (see :func:`row_factory_for`) imported
227
+ an optional dependency (see :func:`_import_psycopg`) imported
140
228
  function-locally, so calling this with ``backend=DIALECT_POSTGRES`` before
141
229
  psycopg is installed raises ``ImportError``/``ModuleNotFoundError`` rather
142
230
  than breaking import of this module for everyone else. *read_only* has no
@@ -157,7 +245,7 @@ def connect(
157
245
  if backend == DIALECT_POSTGRES:
158
246
  if not dsn:
159
247
  raise ValueError("sql.connect(backend='postgres') requires dsn")
160
- import psycopg # noqa: PLC0415 -- optional dep, see row_factory_for
248
+ psycopg = _import_psycopg()
161
249
 
162
250
  return psycopg.connect(dsn)
163
251
  raise UnsupportedDialectError(backend)
@@ -348,19 +436,20 @@ def row_factory_for(dialect: str) -> Any:
348
436
 
349
437
  ``sqlite3.Row`` is returned directly (it's a base-dependency import,
350
438
  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.
439
+ imported function-locally -- ``psycopg`` is an optional dependency (the
440
+ ``postgres`` extra, #2886), never a base or ``[dev]`` one (see
441
+ ``pyproject.toml``'s ``[project.optional-dependencies]``) -- so calling
442
+ this with :data:`DIALECT_POSTGRES` before the extra is installed raises
443
+ ``ImportError``/``ModuleNotFoundError``, naming the extra to install
444
+ (see :func:`_import_psycopg`), rather than breaking import of this
445
+ module for everyone else.
358
446
  """
359
447
  if dialect == DIALECT_SQLITE:
360
448
  import sqlite3
361
449
 
362
450
  return sqlite3.Row
363
451
  if dialect == DIALECT_POSTGRES:
452
+ _import_psycopg() # translate a missing psycopg into an actionable message
364
453
  from psycopg.rows import dict_row # noqa: PLC0415 -- optional dep, see docstring
365
454
 
366
455
  return dict_row
@@ -440,6 +529,77 @@ def autoincrement_pk_ddl(dialect: str) -> str:
440
529
  raise UnsupportedDialectError(dialect)
441
530
 
442
531
 
532
+ def identity_columns(conn: Any, table: str) -> list[str]:
533
+ """Column names in *table* declared ``GENERATED { ALWAYS | BY DEFAULT }
534
+ AS IDENTITY`` -- i.e. produced by :func:`autoincrement_pk_ddl`'s Postgres
535
+ branch. Always ``[]`` on SQLite: ``AUTOINCREMENT`` is a ROWID alias, not
536
+ a separate sequence object, so there is nothing to fall out of sync
537
+ (see :func:`resync_identity_sequence`).
538
+
539
+ Used by ``coord.store_migrate.import_table`` -- a bulk import writes
540
+ explicit ``id`` values into these columns (accepted by
541
+ ``GENERATED BY DEFAULT``, unlike ``GENERATED ALWAYS``), which does not
542
+ itself advance the underlying sequence, so the caller must resync it
543
+ afterward or the next ordinary write collides with an id the import
544
+ already used.
545
+ """
546
+ dialect = detect_dialect(conn)
547
+ if dialect == DIALECT_SQLITE:
548
+ return []
549
+ if dialect == DIALECT_POSTGRES:
550
+ cur = execute(
551
+ conn,
552
+ "SELECT column_name FROM information_schema.columns "
553
+ "WHERE table_name = ? AND identity_generation IS NOT NULL "
554
+ "ORDER BY ordinal_position",
555
+ (table,),
556
+ )
557
+ names = []
558
+ for row in cur.fetchall():
559
+ try:
560
+ names.append(row["column_name"])
561
+ except (KeyError, TypeError, IndexError):
562
+ names.append(row[0])
563
+ return names
564
+ raise UnsupportedDialectError(dialect)
565
+
566
+
567
+ def resync_identity_sequence(conn: Any, table: str, column: str) -> None:
568
+ """Advance *table*.*column*'s identity sequence to match the data
569
+ actually in the table -- a no-op on SQLite.
570
+
571
+ A bulk import that INSERTs explicit ``id`` values into a
572
+ ``GENERATED BY DEFAULT AS IDENTITY`` column (see
573
+ :func:`autoincrement_pk_ddl`) does not advance that column's sequence as
574
+ a side effect -- the sequence only moves when something calls
575
+ ``nextval()`` on it, which an explicit-value INSERT never does. Left
576
+ unresynced, the next ordinary write with no explicit id (how every
577
+ caller in this tree writes today) is handed a value the import already
578
+ used and rejected as a primary-key violation.
579
+
580
+ ``setval(pg_get_serial_sequence(...), ..., is_called)``'s three-arg form
581
+ is used rather than the two-arg form specifically for the empty-table
582
+ case: with *is_called* explicitly computed as "does the table have any
583
+ rows", an empty table correctly leaves the sequence so the *next*
584
+ ``nextval()`` returns the identity's own start value (1) instead of 2,
585
+ which the two-arg form (which always behaves as if ``is_called=true``)
586
+ would get wrong.
587
+ """
588
+ dialect = detect_dialect(conn)
589
+ if dialect == DIALECT_SQLITE:
590
+ return
591
+ if dialect == DIALECT_POSTGRES:
592
+ execute(
593
+ conn,
594
+ "SELECT setval(pg_get_serial_sequence(?, ?), "
595
+ f'COALESCE((SELECT MAX("{column}") FROM "{table}"), 1), ' # noqa: S608 -- column/table from introspection, not user input
596
+ f'(SELECT MAX("{column}") FROM "{table}") IS NOT NULL)', # noqa: S608
597
+ (table, column),
598
+ )
599
+ return
600
+ raise UnsupportedDialectError(dialect)
601
+
602
+
443
603
  # SQLite has no BOOLEAN type -- every flag column in coord/db.py's schema
444
604
  # (e.g. ``pinned INTEGER NOT NULL DEFAULT 0``, ``hold_after INTEGER NOT
445
605
  # NULL DEFAULT 0``) is declared ``INTEGER DEFAULT 0``, using 0/1 as
@@ -568,6 +728,71 @@ def table_columns(conn: Any, table: str) -> list[tuple[str, str]]:
568
728
  raise UnsupportedDialectError(dialect)
569
729
 
570
730
 
731
+ def foreign_keys(conn: Any, table: str) -> list[tuple[str, str, str]]:
732
+ """Return ``[(from_column, ref_table, ref_column), ...]`` for every FK
733
+ *table* declares (empty if none, or if *table* doesn't exist) --
734
+ portably across SQLite's ``PRAGMA foreign_key_list(...)`` and Postgres's
735
+ standard ``information_schema`` constraint views (#828).
736
+
737
+ SQLite's FK introspection is a pragma, like ``table_info`` above -- same
738
+ reasoning, same fix: this is the one place that pragma's statement text
739
+ may appear outside ``coord/db.py``, so a caller (``coord.store_migrate``,
740
+ today) never writes it directly. Postgres has no single-pragma
741
+ equivalent; the standard three-way join across
742
+ ``information_schema.table_constraints`` /
743
+ ``key_column_usage`` / ``constraint_column_usage`` is the SQL-standard
744
+ way to ask "what does this table reference, and through which column"
745
+ without touching Postgres's own (non-standard) ``pg_catalog`` tables.
746
+
747
+ The table name is interpolated into the SQLite ``PRAGMA`` text for the
748
+ same reason :func:`table_columns` does -- pragmas take no bound
749
+ parameter for their target object; every call site passes a hardcoded
750
+ table constant, never user input.
751
+
752
+ Known limitation, Postgres branch: the three-way join keys purely on
753
+ ``constraint_name``/``table_schema``, with no ordinal-position join
754
+ between ``key_column_usage`` and ``constraint_column_usage``. For a
755
+ *composite* (multi-column) foreign key this can mis-pair columns --
756
+ e.g. return ``(col_a, ref_table, ref_col_b)`` instead of the two
757
+ correctly-paired single-column edges. Not triggered today: the schema
758
+ has exactly one FK, and it's single-column. Fix before adding a
759
+ composite FK to ``coord/db.py``'s schema: join on ``ordinal_position``
760
+ too (Postgres exposes it on both views).
761
+ """
762
+ dialect = detect_dialect(conn)
763
+ if dialect == DIALECT_SQLITE:
764
+ cur = execute(conn, f"PRAGMA foreign_key_list({table})") # noqa: S608 -- table name, not user input
765
+ edges = []
766
+ for row in cur.fetchall():
767
+ values = tuple(row)
768
+ # id, seq, table, from, to, on_update, on_delete, match
769
+ edges.append((values[3], values[2], values[4] or "rowid"))
770
+ return edges
771
+ if dialect == DIALECT_POSTGRES:
772
+ cur = execute(
773
+ conn,
774
+ "SELECT kcu.column_name, ccu.table_name AS ref_table, "
775
+ "ccu.column_name AS ref_column "
776
+ "FROM information_schema.table_constraints tc "
777
+ "JOIN information_schema.key_column_usage kcu "
778
+ " ON tc.constraint_name = kcu.constraint_name "
779
+ " AND tc.table_schema = kcu.table_schema "
780
+ "JOIN information_schema.constraint_column_usage ccu "
781
+ " ON tc.constraint_name = ccu.constraint_name "
782
+ " AND tc.table_schema = ccu.table_schema "
783
+ "WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = ?",
784
+ (table,),
785
+ )
786
+ edges = []
787
+ for row in cur.fetchall():
788
+ try:
789
+ edges.append((row["column_name"], row["ref_table"], row["ref_column"]))
790
+ except (KeyError, TypeError, IndexError):
791
+ edges.append((row[0], row[1], row[2]))
792
+ return edges
793
+ raise UnsupportedDialectError(dialect)
794
+
795
+
571
796
  # ── WAL (#2782) ───────────────────────────────────────────────────────────
572
797
  #
573
798
  # WAL is a SQLite storage concept with no Postgres equivalent at all -- unlike
@@ -615,7 +840,7 @@ def driver_error(conn: Any) -> type[BaseException]:
615
840
 
616
841
  return sqlite3.Error
617
842
  if dialect == DIALECT_POSTGRES:
618
- import psycopg # noqa: PLC0415 -- optional dep, see row_factory_for
843
+ psycopg = _import_psycopg()
619
844
 
620
845
  return psycopg.Error
621
846
  raise UnsupportedDialectError(dialect)
@@ -637,13 +862,15 @@ def driver_errors() -> tuple[type[BaseException], ...]:
637
862
  instead of a retried write.
638
863
 
639
864
  ``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
865
+ ``psycopg`` is an optional dependency, not a base or ``[dev]`` one (see
866
+ :func:`_import_psycopg`), so its absence is the normal case today, not an
867
+ error: this degrades to ``(sqlite3.Error,)`` rather than raising
868
+ ``ImportError`` -- unlike every other Postgres call site in this module,
869
+ this one does NOT route through :func:`_import_psycopg` and its
870
+ actionable message, precisely because the message would just be
871
+ swallowed unread by the ``except ImportError`` below; there is no dialect
872
+ to detect at all here, so degrading silently (not even
873
+ function-local, deferred-import-style) is correct: a caller doing
647
874
  ``except sql.driver_errors():`` on a SQLite-only install must keep
648
875
  behaving exactly as ``except sqlite3.OperationalError:`` always did.
649
876
 
@@ -656,7 +883,7 @@ def driver_errors() -> tuple[type[BaseException], ...]:
656
883
 
657
884
  errors: list[type[BaseException]] = [sqlite3.Error]
658
885
  try:
659
- import psycopg # noqa: PLC0415 -- optional dep, see row_factory_for
886
+ import psycopg # noqa: PLC0415 -- optional dep, absence degrades silently, see docstring
660
887
  except ImportError:
661
888
  pass
662
889
  else: