code-coordinator 0.5.489__tar.gz → 0.5.491__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 (897) hide show
  1. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/db.py +86 -0
  5. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/diagnose.py +164 -0
  6. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/state.py +30 -0
  7. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/conftest.py +28 -0
  8. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_db.py +71 -0
  9. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_diagnose.py +153 -0
  10. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_state.py +40 -0
  11. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/.gitignore +0 -0
  24. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/GOAL.md +0 -0
  26. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/LICENSE +0 -0
  27. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/README.md +0 -0
  29. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/approved_work.py +0 -0
  46. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/audit.py +0 -0
  47. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/auto_loop.py +0 -0
  48. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/backup.py +0 -0
  49. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/claude_setup_token.py +0 -0
  63. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/client.py +0 -0
  65. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/codegen.py +0 -0
  66. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/__init__.py +0 -0
  67. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/_common.py +0 -0
  68. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/acceptance.py +0 -0
  69. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/agent_ops.py +0 -0
  70. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/audit.py +0 -0
  71. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/backup.py +0 -0
  72. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/codegen.py +0 -0
  74. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/dr.py +0 -0
  77. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/drive_queue.py +0 -0
  79. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/gate_a.py +0 -0
  80. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/gates.py +0 -0
  81. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/issues.py +0 -0
  82. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/lifecycle.py +0 -0
  83. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/machine.py +0 -0
  84. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/merge.py +0 -0
  85. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/milestone.py +0 -0
  86. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/plan_followup.py +0 -0
  87. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/plans.py +0 -0
  88. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/portal.py +0 -0
  89. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/pr.py +0 -0
  90. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/release.py +0 -0
  91. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/repo.py +0 -0
  92. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/report.py +0 -0
  93. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/review.py +0 -0
  94. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/scorecard.py +0 -0
  95. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/sessions.py +0 -0
  96. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/setup.py +0 -0
  97. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/status.py +0 -0
  98. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/store_migrate.py +0 -0
  99. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/terminal.py +0 -0
  100. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/test_gate.py +0 -0
  101. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/commands/tui.py +0 -0
  102. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/comments.py +0 -0
  103. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/config.py +0 -0
  104. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/config_reload.py +0 -0
  105. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/confirm_test.py +0 -0
  106. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/conflict_fix.py +0 -0
  107. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dao.py +0 -0
  108. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dashboard/__init__.py +0 -0
  109. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dashboard/fixture.py +0 -0
  110. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dashboard/index.html +0 -0
  111. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dashboard/server.py +0 -0
  112. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dashboard/terminal.py +0 -0
  113. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dead_end.py +0 -0
  114. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/decomposition_chat.py +0 -0
  115. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/README.md +0 -0
  116. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-agent.service +0 -0
  117. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-backup.service +0 -0
  118. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-backup.timer +0 -0
  119. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-db-backup.service +0 -0
  120. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-db-backup.sh +0 -0
  121. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-db-backup.timer +0 -0
  122. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-dr-verify.service +0 -0
  123. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-dr-verify.timer +0 -0
  124. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-drive-queue.service +0 -0
  125. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-drive-queue.timer +0 -0
  126. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-failure-notify.service +0 -0
  127. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-fleet-watchdog.service +0 -0
  128. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  129. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-notify.service +0 -0
  130. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-notify.timer +0 -0
  131. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-release-propagate.service +0 -0
  132. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-release-propagate.timer +0 -0
  133. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-release-window.service +0 -0
  134. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-release-window.timer +0 -0
  135. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-serve.service +0 -0
  136. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-web-dist-build.service +0 -0
  137. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-web-dist-build.timer +0 -0
  138. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy/coord-web.service +0 -0
  139. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy_manifest.py +0 -0
  140. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deploy_units.py +0 -0
  141. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deprecation_telemetry.py +0 -0
  142. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/deps.py +0 -0
  143. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dispatch.py +0 -0
  144. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dispatch_liveness.py +0 -0
  145. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dist_name.py +0 -0
  146. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dr_promote.py +0 -0
  147. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/dr_verify.py +0 -0
  148. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/drive.py +0 -0
  149. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/drive_queue.py +0 -0
  150. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/drive_state.py +0 -0
  151. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/events.py +0 -0
  152. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/failure_class.py +0 -0
  153. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/failure_classifier.py +0 -0
  154. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/filelock.py +0 -0
  155. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/fleet_config_health.py +0 -0
  156. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/forge_availability.py +0 -0
  157. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/freshness.py +0 -0
  158. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/gate_a.py +0 -0
  159. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/gate_b.py +0 -0
  160. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/gate_snapshot.py +0 -0
  161. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/gates.py +0 -0
  162. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/gen_board_fixture.py +0 -0
  163. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/github_ops.py +0 -0
  164. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/github_throttle.py +0 -0
  165. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/goal.py +0 -0
  166. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/graph_health.py +0 -0
  167. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/__init__.py +0 -0
  168. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/aggregate.py +0 -0
  169. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/__init__.py +0 -0
  170. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/_ci_pin.py +0 -0
  171. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/agent_install.py +0 -0
  172. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/cargo_targets.py +0 -0
  173. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/claude_binary.py +0 -0
  174. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/config_drift.py +0 -0
  175. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  176. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/coord_web_ci_pin.py +0 -0
  177. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/deploy_lane_facts.py +0 -0
  178. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/disk.py +0 -0
  179. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/fleet_board.py +0 -0
  180. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  181. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/fleet_phantom.py +0 -0
  182. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/fleet_unit_drift.py +0 -0
  183. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/graph.py +0 -0
  184. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/graphify_cli.py +0 -0
  185. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/index_lock.py +0 -0
  186. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/issues_sync_staleness.py +0 -0
  187. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/plan_usage.py +0 -0
  188. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/pr_churn.py +0 -0
  189. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/release_cordon.py +0 -0
  190. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/repo_state.py +0 -0
  191. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/spawned_coord.py +0 -0
  192. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/stalled_pipeline.py +0 -0
  193. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/timer_active.py +0 -0
  194. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/toolchain.py +0 -0
  195. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/unit_drift.py +0 -0
  196. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/unit_enablement.py +0 -0
  197. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/wedged_drive_queue.py +0 -0
  198. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/checks/worktrees.py +0 -0
  199. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/cli.py +0 -0
  200. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/context.py +0 -0
  201. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/fleet_snapshot.py +0 -0
  202. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/models.py +0 -0
  203. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/pypi.py +0 -0
  204. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/registry.py +0 -0
  205. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/render.py +0 -0
  206. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/health/units.py +0 -0
  207. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/hooks.py +0 -0
  208. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/housekeeping.py +0 -0
  209. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/interactive.py +0 -0
  210. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/invariant_alarms.py +0 -0
  211. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/issue_store.py +0 -0
  212. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/issues_sync_status.py +0 -0
  213. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/liveness_auditor.py +0 -0
  214. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/machine_fault.py +0 -0
  215. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/machine_metrics.py +0 -0
  216. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/machine_onboard.py +0 -0
  217. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/machine_pause.py +0 -0
  218. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/machine_stats.py +0 -0
  219. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/merge_queue.py +0 -0
  220. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/milestone_chat.py +0 -0
  221. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/milestone_dispatch.py +0 -0
  222. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/milestone_gate.py +0 -0
  223. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/milestone_order.py +0 -0
  224. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/mock_author.py +0 -0
  225. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/models.py +0 -0
  226. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/network.py +0 -0
  227. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/new_issue_chat.py +0 -0
  228. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/__init__.py +0 -0
  229. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/baseline.py +0 -0
  230. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/cli.py +0 -0
  231. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/collect.py +0 -0
  232. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/digest.py +0 -0
  233. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/models.py +0 -0
  234. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/predicate.py +0 -0
  235. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/service.py +0 -0
  236. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/store.py +0 -0
  237. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notifier/transport.py +0 -0
  238. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/notify.py +0 -0
  239. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/openapi.py +0 -0
  240. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/overlap_fence.py +0 -0
  241. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/overlap_predict.py +0 -0
  242. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/parentage.py +0 -0
  243. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/parentage_github.py +0 -0
  244. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/pipeline.py +0 -0
  245. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/plan_parser.py +0 -0
  246. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/plans.py +0 -0
  247. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/platform_paths.py +0 -0
  248. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/portal_bridge.py +0 -0
  249. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/portal_store.py +0 -0
  250. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/portal_sync.py +0 -0
  251. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/pr_body_lint.py +0 -0
  252. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/prereqs.py +0 -0
  253. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/progress.py +0 -0
  254. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/providers/__init__.py +0 -0
  255. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/providers/base.py +0 -0
  256. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/providers/claude.py +0 -0
  257. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/providers/claude_pty.py +0 -0
  258. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/providers/opencode.py +0 -0
  259. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/queue_diagnose.py +0 -0
  260. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/reconcile.py +0 -0
  261. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/reconcile_tick.py +0 -0
  262. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/refine_chat.py +0 -0
  263. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/release_cordon.py +0 -0
  264. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/release_propagate.py +0 -0
  265. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/release_verify.py +0 -0
  266. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/release_window.py +0 -0
  267. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/repo_dormancy.py +0 -0
  268. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/repo_edit.py +0 -0
  269. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/repo_onboard.py +0 -0
  270. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/reports.py +0 -0
  271. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/rest_schema.py +0 -0
  272. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/revalidate.py +0 -0
  273. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/review.py +0 -0
  274. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/scorecard.py +0 -0
  275. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/self_health.py +0 -0
  276. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/serve_app.py +0 -0
  277. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  278. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  279. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  280. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  281. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/portal-followup/SKILL.md +0 -0
  283. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/release-now/SKILL.md +0 -0
  284. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  285. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  286. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/skills/update-issue/SKILL.md +0 -0
  287. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/smoke.py +0 -0
  288. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/spend_ceiling.py +0 -0
  289. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/split_work.py +0 -0
  290. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/sql.py +0 -0
  291. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/stage_projection.py +0 -0
  292. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/store_migrate.py +0 -0
  293. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/store_parity.py +0 -0
  294. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/templates/deploy-cloudflare.node.yml +0 -0
  295. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/test_author.py +0 -0
  296. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/test_chat.py +0 -0
  297. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/test_orchestrator.py +0 -0
  298. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/test_report.py +0 -0
  299. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/tui_release.py +0 -0
  300. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/uat_checks.py +0 -0
  301. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/usage.py +0 -0
  302. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/usage_limits.py +0 -0
  303. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/usage_rollup.py +0 -0
  304. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coord/worker_events.py +0 -0
  305. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/coordinator.example.yml +0 -0
  306. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-agent.service +0 -0
  307. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-backup.service +0 -0
  308. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-backup.timer +0 -0
  309. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-db-backup.service +0 -0
  310. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-db-backup.sh +0 -0
  311. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-db-backup.timer +0 -0
  312. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-dr-verify.service +0 -0
  313. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-dr-verify.timer +0 -0
  314. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-drive-queue.service +0 -0
  315. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-drive-queue.timer +0 -0
  316. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-failure-notify.service +0 -0
  317. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-failure-notify.sh +0 -0
  318. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-fleet-watchdog.service +0 -0
  319. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-fleet-watchdog.timer +0 -0
  320. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-notify.service +0 -0
  321. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-notify.timer +0 -0
  322. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-release-propagate.service +0 -0
  323. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-release-propagate.timer +0 -0
  324. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-release-window.service +0 -0
  325. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-release-window.timer +0 -0
  326. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-serve.service +0 -0
  327. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-web-dist-build.service +0 -0
  328. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-web-dist-build.sh +0 -0
  329. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-web-dist-build.timer +0 -0
  330. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-web-rollback.sh +0 -0
  331. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/coord-web.service +0 -0
  332. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/deploy/node-shim.sh +0 -0
  333. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ADR_COORD_TUI_CI.md +0 -0
  334. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  335. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ADR_COORD_WEB_CI.md +0 -0
  336. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ADR_COORD_WEB_DIST.md +0 -0
  337. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  338. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/AGENT_OPERATIONS.md +0 -0
  339. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ARCHITECTURE.md +0 -0
  340. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ARCH_SECURITY_GATES.md +0 -0
  341. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/COCKPIT.md +0 -0
  342. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/CONTROL_CENTER.md +0 -0
  343. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/COST_DISCIPLINE.md +0 -0
  344. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/CROSS_PLATFORM.md +0 -0
  345. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/CUSTOMER_FACING_APPS.md +0 -0
  346. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/CUSTOMER_PORTAL.md +0 -0
  347. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/DATA_STORE_SELECTION.md +0 -0
  348. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/DISASTER_RECOVERY.md +0 -0
  349. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/DRIVE_QUEUE.md +0 -0
  350. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/EPHEMERAL_WORKERS.md +0 -0
  351. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/FORGE_MIGRATION.md +0 -0
  352. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/GRAPHIFY_SETUP.md +0 -0
  353. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ISSUE_GUIDANCE.md +0 -0
  354. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/MAC_MINI.md +0 -0
  355. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  356. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/NOTIFIER.md +0 -0
  357. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/OPENCODE_VERIFICATION.md +0 -0
  358. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/OPERATING_GOTCHAS.md +0 -0
  359. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/OPERATOR_GUIDES.md +0 -0
  360. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/ORACLE_LOOP.md +0 -0
  361. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/PHONE_WEBAPP.md +0 -0
  362. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/PIPELINE_V2.md +0 -0
  363. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/PLATFORM_EVOLUTION.md +0 -0
  364. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/SECOND_BACKEND.md +0 -0
  365. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/STORE_SERVICE.md +0 -0
  366. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  367. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/WEB_CONTROL_CENTER.md +0 -0
  368. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/WSL_WINDOWS_WORKER.md +0 -0
  369. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/mocks/web/README.md +0 -0
  370. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/mocks/web/_tokens.css +0 -0
  371. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/mocks/web/issue-detail.html +0 -0
  372. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/mocks/web/pipeline-narrow.html +0 -0
  373. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/docs/mocks/web/pipeline-wide.html +0 -0
  374. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/graphify-out/.gitignore +0 -0
  375. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/install-agent.sh +0 -0
  376. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/pyproject.toml +0 -0
  377. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/audit_review_verdict_overrides.py +0 -0
  378. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  379. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/build-worker-image.sh +0 -0
  380. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/coordinator-machine.py +0 -0
  381. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/dr-down.sh +0 -0
  382. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/dr-up.sh +0 -0
  383. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/epic-down.sh +0 -0
  384. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/epic-up.sh +0 -0
  385. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/preflight.sh +0 -0
  386. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/provision-server.sh +0 -0
  387. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/provision-worker.sh +0 -0
  388. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  389. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  390. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/throwaway-vm.sh +0 -0
  391. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/azure-workers/verify-github-token.sh +0 -0
  392. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/check_gh_argv_containment.py +0 -0
  393. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/codegen.py +0 -0
  394. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/coord-test-runner.sh +0 -0
  395. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  396. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  397. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  398. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  399. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/coord-venv-rollback.sh +0 -0
  400. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/drive-batch.sh +0 -0
  401. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/extract-coord-tui.sh +0 -0
  402. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/fleet_watchdog.py +0 -0
  403. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/gen_board_fixture.py +0 -0
  404. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/gen_mock_index.py +0 -0
  405. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/lib/provision-core.sh +0 -0
  406. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/next_release_tag.py +0 -0
  407. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/provision-machine.sh +0 -0
  408. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/run_tests_in_populated_home.sh +0 -0
  409. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/run_tests_without_gh.sh +0 -0
  410. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/setup-macmini.sh +0 -0
  411. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/smoke_437_interactive.py +0 -0
  412. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/verify-provision-noble.sh +0 -0
  413. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/verify_878_review_capture.py +0 -0
  414. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/verify_release_published.py +0 -0
  415. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/scripts/verify_release_wheel.py +0 -0
  416. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/setup.cfg +0 -0
  417. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/SMOKE_SET.md +0 -0
  418. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/__init__.py +0 -0
  419. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-37/conftest.py +0 -0
  420. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-37/contract.md +0 -0
  421. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-37/manifest.yml +0 -0
  422. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  423. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  424. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-51/contract.md +0 -0
  425. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  426. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  427. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-51/manifest.yml +0 -0
  428. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  429. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-51/tsconfig.json +0 -0
  430. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  431. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/backends.py +0 -0
  432. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/board-pipeline-basic.json +0 -0
  433. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  434. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  435. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  436. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  437. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/all_pass.json +0 -0
  438. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  439. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/mixed_fail.json +0 -0
  440. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  441. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  442. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/skip.json +0 -0
  443. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/playwright/truncated.json +0 -0
  444. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  445. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  446. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  447. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  448. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  449. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  450. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  451. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  452. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_acceptance.py +0 -0
  453. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_acceptance_drivers.py +0 -0
  454. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent.py +0 -0
  455. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_api_error.py +0 -0
  456. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_app.py +0 -0
  457. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_branch_base.py +0 -0
  458. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_branch_capture.py +0 -0
  459. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_config_free_1712.py +0 -0
  460. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_deploy_units_endpoint.py +0 -0
  461. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_dirty_worktree.py +0 -0
  462. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  463. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_graph_self_heal.py +0 -0
  464. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_health_h3.py +0 -0
  465. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_idle_restart.py +0 -0
  466. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_push_failure.py +0 -0
  467. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_reap.py +0 -0
  468. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_repos_and_pull.py +0 -0
  469. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_restart_services_endpoint.py +0 -0
  470. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_skills_self_heal.py +0 -0
  471. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_startup_diagnostics.py +0 -0
  472. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_update.py +0 -0
  473. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_update_bluegreen.py +0 -0
  474. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_usage_limit.py +0 -0
  475. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_agent_zero_commit.py +0 -0
  476. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ambient_home_isolation.py +0 -0
  477. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_approve_capability_reroute_3241.py +0 -0
  478. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_approve_dependency_busy_2804.py +0 -0
  479. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_approve_reject_plan.py +0 -0
  480. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_approve_usage_gate.py +0 -0
  481. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_approved_work_2532.py +0 -0
  482. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_approved_work_2996.py +0 -0
  483. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_assignment_already_recorded_daemon.py +0 -0
  484. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_audit_log.py +0 -0
  485. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_audit_outcome.py +0 -0
  486. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_audit_query.py +0 -0
  487. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_auto_loop.py +0 -0
  488. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_auto_release_publish_2035.py +0 -0
  489. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_backend_selection.py +0 -0
  490. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_backup.py +0 -0
  491. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_base_checkout_restore.py +0 -0
  492. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_block_log.py +0 -0
  493. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_cap_762.py +0 -0
  494. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_fixture.py +0 -0
  495. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_read_path.py +0 -0
  496. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_schema.py +0 -0
  497. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_service.py +0 -0
  498. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_state.py +0 -0
  499. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_board_wire.py +0 -0
  500. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_brain.py +0 -0
  501. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_branch_model.py +0 -0
  502. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_bug_intake.py +0 -0
  503. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_build_worker_image_env_update.py +0 -0
  504. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cargo_cache.py +0 -0
  505. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_check_gh_argv_containment.py +0 -0
  506. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ci_acceptance_gate_1950.py +0 -0
  507. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ci_fix.py +0 -0
  508. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ci_github.py +0 -0
  509. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ci_gitlab.py +0 -0
  510. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ci_parity_2091.py +0 -0
  511. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_ci_store.py +0 -0
  512. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_claim.py +0 -0
  513. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_claude_md_budget.py +0 -0
  514. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_claude_setup_token.py +0 -0
  515. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_acceptance.py +0 -0
  516. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_assign.py +0 -0
  517. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  518. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_assign_interactive_remote.py +0 -0
  519. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_assign_provider.py +0 -0
  520. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  521. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_audit.py +0 -0
  522. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_chat_continue.py +0 -0
  523. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_codegen.py +0 -0
  524. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_decide.py +0 -0
  525. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_diagnose_capability_rules.py +0 -0
  526. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_diagnose_config_provenance.py +0 -0
  527. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_diagnose_forge_availability.py +0 -0
  528. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_diagnose_graph.py +0 -0
  529. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_diagnose_self.py +0 -0
  530. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_diagnose_test_coverage.py +0 -0
  531. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_doctor.py +0 -0
  532. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_doctor_config_free_1801.py +0 -0
  533. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  534. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  535. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_drive.py +0 -0
  536. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_drive_queue.py +0 -0
  537. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_escalate.py +0 -0
  538. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_fix_headless_review.py +0 -0
  539. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_gate_a.py +0 -0
  540. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_install_drift.py +0 -0
  541. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_install_skills.py +0 -0
  542. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_issue_comment.py +0 -0
  543. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_issue_create_label.py +0 -0
  544. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_issue_reopen.py +0 -0
  545. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_issue_view_list.py +0 -0
  546. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_merge.py +0 -0
  547. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_assign.py +0 -0
  548. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_capture.py +0 -0
  549. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_chat_add_child.py +0 -0
  550. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_dispatch.py +0 -0
  551. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_gate_b.py +0 -0
  552. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_gate_c.py +0 -0
  553. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_order.py +0 -0
  554. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  555. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_milestone_ship.py +0 -0
  556. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_network.py +0 -0
  557. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_new_issue_chat.py +0 -0
  558. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_plans.py +0 -0
  559. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_portal.py +0 -0
  560. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_pr.py +0 -0
  561. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_pull_artifact.py +0 -0
  562. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_queue.py +0 -0
  563. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_reattach_sessions.py +0 -0
  564. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_refine_board.py +0 -0
  565. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_release_preflight.py +0 -0
  566. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_release_propagate.py +0 -0
  567. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_release_window.py +0 -0
  568. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_repo_2220.py +0 -0
  569. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  570. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_scorecard.py +0 -0
  571. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_serve_store_backend_3084.py +0 -0
  572. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_set_review_findings.py +0 -0
  573. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_advisory_terminal.py +0 -0
  574. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_contested_tag.py +0 -0
  575. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_invariant_alarms.py +0 -0
  576. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_machine_fault.py +0 -0
  577. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_merge_queue.py +0 -0
  578. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_provider.py +0 -0
  579. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_retried_3340.py +0 -0
  580. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_review_finalizing.py +0 -0
  581. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_test_failed_tag.py +0 -0
  582. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_status_usage_limit.py +0 -0
  583. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_sync_comments_873.py +0 -0
  584. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_test_plan.py +0 -0
  585. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_track.py +0 -0
  586. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_tui_update.py +0 -0
  587. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cli_wait.py +0 -0
  588. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_client.py +0 -0
  589. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_client_base_install.py +0 -0
  590. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_client_config_cache_atomic_3052.py +0 -0
  591. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_client_resource_migration_1946.py +0 -0
  592. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_commands_common.py +0 -0
  593. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_comments.py +0 -0
  594. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_completion_summary.py +0 -0
  595. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config.py +0 -0
  596. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config_acceptance.py +0 -0
  597. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config_audit.py +0 -0
  598. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config_drift_check.py +0 -0
  599. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config_pricing.py +0 -0
  600. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  601. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_config_usage_gate.py +0 -0
  602. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_confirm_test.py +0 -0
  603. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_conflict_fix.py +0 -0
  604. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_conflict_fix_semantic.py +0 -0
  605. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  606. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_test.py +0 -0
  607. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  608. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_test_runner_baseline.py +0 -0
  609. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_test_runner_populated_home.py +0 -0
  610. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_test_runner_routing.py +0 -0
  611. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_test_runner_toolchain.py +0 -0
  612. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_uat.py +0 -0
  613. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coord_web_sse_restart_live.py +0 -0
  614. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_coordinator_machine.py +0 -0
  615. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_cross_platform_imports.py +0 -0
  616. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dao.py +0 -0
  617. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dashboard.py +0 -0
  618. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dashboard_api.py +0 -0
  619. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dashboard_fixture.py +0 -0
  620. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dashboard_server.py +0 -0
  621. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dashboard_terminal.py +0 -0
  622. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dashboard_terminal_live.py +0 -0
  623. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dead_end.py +0 -0
  624. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_decomposition_chat.py +0 -0
  625. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_coord_db_backup.py +0 -0
  626. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_coord_web_dist.py +0 -0
  627. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_coord_web_rollback.py +0 -0
  628. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_db_backup_unit.py +0 -0
  629. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_drive_queue_unit.py +0 -0
  630. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_failure_notify_unit.py +0 -0
  631. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_manifest.py +0 -0
  632. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_notify_unit.py +0 -0
  633. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_units_lane.py +0 -0
  634. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deploy_web_unit.py +0 -0
  635. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deprecation_telemetry.py +0 -0
  636. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_deps.py +0 -0
  637. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dispatch.py +0 -0
  638. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dispatch_liveness.py +0 -0
  639. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dispatch_target_validation.py +0 -0
  640. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dispatch_workers.py +0 -0
  641. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dist_name.py +0 -0
  642. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_done_housekeeping.py +0 -0
  643. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dr_azure_scripts.py +0 -0
  644. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dr_promote.py +0 -0
  645. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_dr_verify.py +0 -0
  646. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive.py +0 -0
  647. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_machine_fault.py +0 -0
  648. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_queue.py +0 -0
  649. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_queue_blocked_rendering.py +0 -0
  650. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_queue_launch_argv.py +0 -0
  651. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  652. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_queue_roll_pending.py +0 -0
  653. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  654. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_state.py +0 -0
  655. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_drive_tmux.py +0 -0
  656. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_epic_up_capability_detection.py +0 -0
  657. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  658. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_epic_up_image_provenance.py +0 -0
  659. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_errors.py +0 -0
  660. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_events.py +0 -0
  661. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_failure_class.py +0 -0
  662. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_failure_classifier.py +0 -0
  663. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_filelock.py +0 -0
  664. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  665. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_fix_escalation_classifier.py +0 -0
  666. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_fix_of_force_override.py +0 -0
  667. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_fleet_config_health.py +0 -0
  668. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_fleet_health_probes.py +0 -0
  669. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_fleet_health_snapshot.py +0 -0
  670. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_fleet_watchdog.py +0 -0
  671. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_forge_availability.py +0 -0
  672. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_freshness.py +0 -0
  673. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_gate_a.py +0 -0
  674. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_gate_b.py +0 -0
  675. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_gate_snapshot_staleness.py +0 -0
  676. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_gates.py +0 -0
  677. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  678. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_gen_mock_index.py +0 -0
  679. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_generated_rust_fixture.py +0 -0
  680. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_generated_rust_requests.py +0 -0
  681. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_generated_types_fixture.py +0 -0
  682. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_github_ops.py +0 -0
  683. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_github_throttle.py +0 -0
  684. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_goal.py +0 -0
  685. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_graph_health.py +0 -0
  686. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_graph_selfheal_absent_2237.py +0 -0
  687. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_handoff.py +0 -0
  688. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_checks.py +0 -0
  689. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_cli.py +0 -0
  690. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_cli_graph.py +0 -0
  691. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_config.py +0 -0
  692. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_context.py +0 -0
  693. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_coord_tui_ci_pin.py +0 -0
  694. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_coord_web_ci_pin.py +0 -0
  695. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_deploy_lane_facts.py +0 -0
  696. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_fix.py +0 -0
  697. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_incident_regression.py +0 -0
  698. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_issues_sync_staleness.py +0 -0
  699. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_pr_churn.py +0 -0
  700. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_pypi.py +0 -0
  701. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_registry.py +0 -0
  702. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_release_cordon_probe.py +0 -0
  703. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_timer_active.py +0 -0
  704. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_toolchain.py +0 -0
  705. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_unit_drift.py +0 -0
  706. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_unit_enablement.py +0 -0
  707. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_health_wedged_drive_queue.py +0 -0
  708. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_hooks.py +0 -0
  709. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_housekeeping.py +0 -0
  710. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_human_attended_437.py +0 -0
  711. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_init.py +0 -0
  712. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_install_agent_venv_2911.py +0 -0
  713. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_integration.py +0 -0
  714. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_briefing_echo.py +0 -0
  715. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_pane_log_2541.py +0 -0
  716. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_prefill_state.py +0 -0
  717. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_session_relaunch.py +0 -0
  718. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_test_verdict_backstop.py +0 -0
  719. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_token_attribution.py +0 -0
  720. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_interactive_worktree.py +0 -0
  721. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_invariant_alarms.py +0 -0
  722. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_issue_store_seam.py +0 -0
  723. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_issues_sync_status.py +0 -0
  724. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_liveness_auditor.py +0 -0
  725. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_liveness_notify.py +0 -0
  726. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_lock_contention_ratchet.py +0 -0
  727. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_machine_fault.py +0 -0
  728. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_machine_metrics.py +0 -0
  729. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_machine_onboard.py +0 -0
  730. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_machine_pause.py +0 -0
  731. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_machine_stats.py +0 -0
  732. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_merge_queue.py +0 -0
  733. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.489 → code_coordinator-0.5.491}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.489
3
+ Version: 0.5.491
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.489
3
+ Version: 0.5.491
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.489",
2
+ "tag": "0.5.491",
3
3
  "distance": 0,
4
- "node": "g70de5f163979948f291485eda2a8ac9db8f4d439",
4
+ "node": "g0bf722668fffd8f60d76696692afdbf7f1b292ff",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-18"
@@ -470,6 +470,92 @@ def _is_release_build(version: str) -> bool:
470
470
  return _RELEASE_VERSION_RE.fullmatch(version) is not None
471
471
 
472
472
 
473
+ class _NoActiveTestConnectionSentinel:
474
+ """Installed as the ``_conn`` singleton whenever pytest is running but no
475
+ test's ``coord_db`` fixture currently holds an active override (#3385).
476
+
477
+ ``tests/conftest.py``'s autouse ``coord_db`` fixture is function-scoped:
478
+ it only guarantees an isolated in-memory connection while ONE test's
479
+ setup/call/teardown phases are running. Before this sentinel existed,
480
+ that fixture's teardown called :func:`close`, which resets the module
481
+ singleton to plain ``None`` -- reopening the exact gap #1960's guard was
482
+ built to close, just one layer up: ANY caller of :func:`get_connection`
483
+ during that gap (between one test's teardown finishing and the next
484
+ test's setup starting, or before the very first test's setup has run at
485
+ all) fell through :func:`get_connection` into :func:`_open`, which
486
+ resolves the REAL ``~/.coord/coord.db`` (#1960, #3385). #1960's own guard
487
+ inside :func:`_open` only fires while ``PYTEST_CURRENT_TEST`` happens to
488
+ be set, which is not guaranteed across that specific gap -- exactly the
489
+ seam #3385 was filed to close after #3380's daemon-lifespan-shutdown fix
490
+ left the reported failure count unchanged.
491
+
492
+ Installed once at ``pytest_configure`` (before collection even starts,
493
+ closing the pre-first-test window) and reinstalled by ``coord_db``'s own
494
+ teardown after every test (closing the inter-test window), so ``_conn``
495
+ is never plain ``None`` for the life of a pytest process:
496
+ :func:`get_connection` always hands back either a real per-test override
497
+ or this sentinel -- it can no longer fall through to :func:`_open` while
498
+ pytest is running, regardless of what races ahead of the next test's
499
+ setup or what runs before the first one.
500
+
501
+ Any attempt to use it -- ``.execute()``, ``.cursor()``, ``.commit()``,
502
+ even the ``.closed`` probe :func:`_connection_is_closed` runs on every
503
+ cached connection -- raises :class:`ProductionDatabaseGuardError`
504
+ immediately via ``__getattr__``, so a caller that reaches this gets a
505
+ clear, correctly-attributed error instead of a real database file
506
+ quietly being opened (or silently reused) underneath it.
507
+
508
+ **Scope, stated plainly (#3385 review).** This closes exactly one seam:
509
+ the ``coord.db._conn`` singleton that :func:`get_connection` reads. It
510
+ is a real, previously-unguarded gap, but it is not asserted here to be
511
+ the sole or even primary source of the ~3700
512
+ ``ProductionDatabaseGuardError`` failures the issue reports on ``main``
513
+ -- that would require the actual CI failure log, which this fix was not
514
+ verified against (see the commit message for what evidence is, and is
515
+ not, available). One other unguarded route was found by inspection
516
+ while investigating this and is flagged rather than silently left for
517
+ someone else to rediscover: ``coord.dao.SqliteStore._connect()``'s
518
+ SQLite branch opens ``self._path`` (``DB_PATH`` by default,
519
+ resolved once at ``__init__``) with no pytest/non-release guard at all
520
+ -- unlike its Postgres branch, which calls
521
+ ``refuse_postgres_under_pytest`` first. ``SqliteStore()`` with no
522
+ explicit ``db_path`` (e.g. ``coord/reports.py``'s
523
+ ``_default_usage_rows``) would reach that unguarded path. Left
524
+ unmodified here: it is outside this fix's file scope
525
+ (``tests/conftest.py`` / ``coord/db.py``) and there is no confirmed
526
+ evidence it contributes to the reported count -- but if a post-merge
527
+ ``main`` ``Tests`` run still shows a nonzero
528
+ ``ProductionDatabaseGuardError`` count after this change, that is the
529
+ next place to look.
530
+ """
531
+
532
+ def __getattr__(self, name: str) -> Any:
533
+ raise ProductionDatabaseGuardError(
534
+ "coord.db.get_connection() was reached while no test's `coord_db` "
535
+ "fixture held an active override (#3385) -- this is the gap "
536
+ "between one test's teardown and the next test's setup, or "
537
+ "before the very first test's setup has run at all. A caller "
538
+ f"tried to access {name!r} on the connection singleton in that "
539
+ "gap. Likely causes: a background thread a prior test spawned "
540
+ "and never joined, or a fixture that reaches coord.db before "
541
+ "the autouse `coord_db` fixture has installed its override. See "
542
+ "#1960 (the guard this generalizes) and #3385 (this sentinel)."
543
+ )
544
+
545
+
546
+ def _pytest_gap_sentinel() -> Any:
547
+ """Factory for :class:`_NoActiveTestConnectionSentinel` (#3385).
548
+
549
+ A function rather than a bare module-level instance so every install
550
+ site (``tests/conftest.py``'s ``pytest_configure`` and ``coord_db``
551
+ teardown) gets its own object -- cheap, and it means a traceback's
552
+ ``id()`` never accidentally suggests two installs shared state they
553
+ don't (the sentinel is stateless, but nothing here should rely on that
554
+ by sharing one instance).
555
+ """
556
+ return _NoActiveTestConnectionSentinel()
557
+
558
+
473
559
  def override_connection(conn: Any) -> None:
474
560
  """Replace the singleton connection. Used in tests to inject :memory: DBs.
475
561
 
@@ -735,6 +735,22 @@ def diagnose_stage(
735
735
  latest = _latest(assignments)
736
736
 
737
737
  if latest is None:
738
+ # #3383: a `review_claims` row held for a work assignment with ZERO
739
+ # review/test-author/mock-author rows (never dispatched, or all
740
+ # deleted) is unreachable from `_recover_review` below — that
741
+ # function only ever runs once `latest` above is non-None. Before
742
+ # this, `--stage review` hit this exact branch and reported the
743
+ # stage healthy while `dispatch_review` was permanently wedged
744
+ # behind the leaked claim (#3206's failure one state earlier — see
745
+ # `_leaked_review_claim_without_row`'s docstring). Checked BEFORE
746
+ # the "no review assignment" finding below, on claim state rather
747
+ # than on row existence, exactly as #3206 already does once a row
748
+ # exists.
749
+ if stage == "review" and _leaked_review_claim_without_row(
750
+ board, repo_name, issue_number, res, reset=reset, dry_run=dry_run,
751
+ ):
752
+ _cleanup_issue(board, config, repo_name, issue_number, res, dry_run=dry_run, reset=reset)
753
+ return res
738
754
  res.findings.append(f"no {stage} assignment on the board for #{issue_number}")
739
755
  res.recovered = True # nothing wedged
740
756
  # Still run the issue-wide cleanup below.
@@ -818,6 +834,154 @@ def diagnose_stage(
818
834
  return res
819
835
 
820
836
 
837
+ # #3383: a claim taken by `claim_review_dispatch` shortly before its caller
838
+ # inserts the review row it's claiming for looks, from a single read,
839
+ # identical to a genuinely leaked claim — the same false-positive window
840
+ # `_recover_review` below already documents for the terminal-row case
841
+ # (#3206). Below this age the claim is reported but NOT offered for release;
842
+ # above it, treated as leaked.
843
+ #
844
+ # NOT short on purpose — `dispatch_review` (coord/review.py) claims at
845
+ # `claim_review_dispatch` (~line 3070) and does NOT insert the review's
846
+ # `assignments` row until `record_dispatched_assignment` (~line 3763); its
847
+ # own `except Exception` handler at ~line 3815 calls the ~500 lines between
848
+ # those two points "pr_lookup, briefing assembly, JSON handling of
849
+ # agent_response, ...". That gap includes several sequential GitHub API
850
+ # calls (`work_is_terminal`, `branch_commits_ahead`, `pr_lookup`,
851
+ # `branch_exists_on_remote`, `pr_diff`, `get_compare_files`,
852
+ # `get_compare_diff`, `get_pr_commit_messages`, an issue-body fetch) and then
853
+ # a candidate loop that POSTs to each reviewer machine's `/assign` with
854
+ # `timeout=ASSIGN_POST_TIMEOUT_SECS` (`coord/dispatch.py` — 60.0s),
855
+ # falling through to the next candidate on rejection/timeout/unreachability.
856
+ # A single slow/unreachable first-choice reviewer machine alone can burn the
857
+ # full 60s before a second candidate is even tried, and there is no hard cap
858
+ # on candidate count — so this has to clear that whole chain, not one
859
+ # network round trip. Picked as a small multiple of minutes so it
860
+ # comfortably outlasts a worst-case multi-candidate dispatch plus GitHub API
861
+ # latency, while still being short enough that a *genuinely* leaked claim
862
+ # doesn't sit unrecoverable for long once someone runs `--reset`.
863
+ _REVIEW_CLAIM_LEAK_GRACE_SECS = 600.0
864
+
865
+
866
+ def _leaked_review_claim_without_row(
867
+ board: "Board",
868
+ repo_name: str,
869
+ issue_number: int,
870
+ res: DiagnoseResult,
871
+ *,
872
+ reset: bool,
873
+ dry_run: bool,
874
+ ) -> bool:
875
+ """#3383: detect (and, under ``--reset``, release) a leaked
876
+ ``review_claims`` row for a work assignment that has NO review /
877
+ test-author / mock-author row at all — the one shape `_recover_review`
878
+ can never see, because `diagnose_stage` only calls it once
879
+ `stage_assignments(..., "review")` finds a row. A claim can be (and, per
880
+ the issue that reported this, was) taken and never released when the
881
+ work assignment it's keyed on was dispatched to review, that review
882
+ never got as far as inserting its own `assignments` row (or its row was
883
+ later deleted, e.g. by an earlier `--reset`), and the claim outlived it.
884
+ Every future `dispatch_review` for that work assignment then denies
885
+ forever with the misleading #3113 "lost the atomic dispatch-claim race"
886
+ reason — while `coord diagnose --stage review` (which hit the
887
+ `latest is None` "no review assignment" branch before this function
888
+ existed) reported the stage healthy.
889
+
890
+ Checked against the WORK assignment's id — `claim_review_dispatch` is
891
+ keyed on the id of the assignment BEING reviewed, never on a review
892
+ row's own id (see `_recover_review`'s `work_assignment_id` resolution).
893
+
894
+ Returns ``True`` when a claim was found (whether or not it could be
895
+ released yet — see the grace-period case) and this function has already
896
+ appended the appropriate finding(s); ``False`` when there is nothing to
897
+ report, in which case the caller's own "no review assignment" message
898
+ is the correct (healthy) diagnosis.
899
+ """
900
+ from coord.state import ( # noqa: PLC0415
901
+ has_review_claim,
902
+ release_review_dispatch_claim,
903
+ review_claim_age_secs,
904
+ )
905
+
906
+ # Narrowing, acknowledged: this only checks the NEWEST `work`-type row
907
+ # for the issue, whereas `claim_review_dispatch` is keyed on whatever
908
+ # work-assignment id `dispatch_review` was actually called with. If the
909
+ # issue ever accumulates more than one `work` row (e.g. a rework/retry
910
+ # dispatched after the original work assignment that leaked the claim),
911
+ # a claim held on the *older* id is invisible here because this checks
912
+ # only the *newest* one. `_recover_review` avoids this by reading the
913
+ # exact id off the review row's own `review_of_assignment_id` FK — there
914
+ # is no review row here to read that FK from, so this has to guess.
915
+ # Probably rare, and the issue's own "worth also considering" `coord
916
+ # doctor` suggestion is the more complete fix; left as a known gap
917
+ # rather than iterating over every `work` row here.
918
+ work_rows = stage_assignments(board, repo_name, issue_number, "work")
919
+ work_latest = _latest(work_rows)
920
+ if work_latest is None or not work_latest.assignment_id:
921
+ return False
922
+ work_assignment_id = work_latest.assignment_id
923
+ if not has_review_claim(work_assignment_id):
924
+ return False
925
+
926
+ age = review_claim_age_secs(work_assignment_id)
927
+ if age is not None and age < _REVIEW_CLAIM_LEAK_GRACE_SECS:
928
+ # Too fresh to distinguish from an in-flight `dispatch_review` call
929
+ # that has taken the claim but not yet inserted its review row —
930
+ # report it, but don't offer to release something that might still
931
+ # be a live, wanted dispatch.
932
+ res.findings.append(
933
+ f"work assignment {work_assignment_id} holds a review-dispatch "
934
+ f"claim taken {age:.1f}s ago with no review row yet — likely an "
935
+ "in-flight dispatch_review, not a leak; re-run diagnose again "
936
+ "shortly if this persists"
937
+ )
938
+ res.recovered = True
939
+ return True
940
+
941
+ res.findings.append(
942
+ f"no review assignment exists for #{issue_number}, but work "
943
+ f"assignment {work_assignment_id} still holds a review-dispatch "
944
+ "claim (leaked review_claims row, #3383 — the #3206 class one state "
945
+ "earlier) — every future dispatch_review for this work assignment "
946
+ "will deny with the misleading #3113 'lost the atomic dispatch-claim "
947
+ "race' reason until it is released. Re-run with --reset to release it."
948
+ )
949
+ res.recovered = False
950
+ res.needs_reset = True
951
+
952
+ if reset:
953
+ if dry_run:
954
+ res.findings.append(
955
+ "(dry-run) would release the leaked review-dispatch claim"
956
+ )
957
+ return True
958
+ release_review_dispatch_claim(work_assignment_id)
959
+ if has_review_claim(work_assignment_id):
960
+ res.findings.append(
961
+ f"release requested for {work_assignment_id}'s "
962
+ "review-dispatch claim, but it is still present on re-read "
963
+ "— the release did NOT persist"
964
+ )
965
+ else:
966
+ res.actions_taken.append(
967
+ "released leaked review-dispatch claim for work assignment "
968
+ f"{work_assignment_id} — dispatch_review is now re-dispatchable"
969
+ )
970
+ res.reset_performed = True
971
+ res.recovered = True
972
+ res.branch_preserved = True
973
+ # Matches `_do_reset`'s (#3206) convention: a successful release
974
+ # must clear the `needs_reset=True` set a few lines above, or
975
+ # `to_json_dict()` — documented as read by the TUI without
976
+ # scraping human-readable lines — carries the internally
977
+ # contradictory `recovered=true needs_reset=true
978
+ # reset_performed=true` even though the plain-text CLI's "still
979
+ # wedged" warning happens to be gated on `not reset` and so never
980
+ # shows it.
981
+ res.needs_reset = False
982
+ return True
983
+
984
+
821
985
  def _recover_review(
822
986
  board, config, latest, state, res: DiagnoseResult, *, dry_run: bool
823
987
  ) -> None:
@@ -2388,6 +2388,36 @@ def has_review_claim(of_assignment_id: str) -> bool:
2388
2388
  return row is not None
2389
2389
 
2390
2390
 
2391
+ def review_claim_age_secs(of_assignment_id: str) -> float | None:
2392
+ """Seconds since *of_assignment_id*'s ``review_claims`` row was taken, or
2393
+ ``None`` when no claim is held (#3383).
2394
+
2395
+ Sibling read to :func:`has_review_claim`, used by ``coord diagnose
2396
+ --stage review`` to gate a claim release on age: a claim taken
2397
+ microseconds ago by an in-flight :func:`claim_review_dispatch` call that
2398
+ has not yet inserted its review ``assignments`` row is indistinguishable,
2399
+ from a single read, from a genuinely leaked claim — exactly the
2400
+ false-positive window already documented on the terminal-review-row path
2401
+ in ``diagnose._recover_review`` (#3206). Comparing ``claimed_at`` against
2402
+ a short grace period lets the caller tell "just claimed, dispatch still
2403
+ running" apart from "claimed a long time ago, nothing is coming".
2404
+
2405
+ Same local-DB-only caveat as :func:`has_review_claim` — reads the local
2406
+ connection, not the daemon, so it undercounts on a thin client.
2407
+ """
2408
+ if not of_assignment_id:
2409
+ return None
2410
+ conn = get_connection()
2411
+ row = sql.execute(
2412
+ conn,
2413
+ "SELECT claimed_at FROM review_claims WHERE of_assignment_id=?",
2414
+ (of_assignment_id,),
2415
+ ).fetchone()
2416
+ if row is None or row[0] is None:
2417
+ return None
2418
+ return time.time() - row[0]
2419
+
2420
+
2391
2421
  def release_review_dispatch_claim(of_assignment_id: str) -> None:
2392
2422
  """Release a claim taken by :func:`claim_review_dispatch`.
2393
2423
 
@@ -87,11 +87,27 @@ def pytest_configure(config):
87
87
 
88
88
  A no-op on the default SQLite path: it neither imports a driver nor opens
89
89
  a socket, so a plain ``pytest`` is unaffected.
90
+
91
+ #3385: also installs ``coord.db``'s pytest-gap sentinel as the initial
92
+ connection singleton, before collection (and therefore every test
93
+ module's import-time code) ever runs. See
94
+ :func:`coord.db._pytest_gap_sentinel` for what this closes: without it,
95
+ ``coord.db._conn`` starts life as plain ``None`` and stays that way until
96
+ the FIRST test's autouse ``coord_db`` fixture installs its override --
97
+ anything that calls ``coord.db.get_connection()`` before that point (e.g.
98
+ module-level code a test file runs at import/collection time) could fall
99
+ through to the real ``~/.coord/coord.db``. Installing the sentinel here
100
+ closes that window the same way ``coord_db``'s own teardown closes the
101
+ inter-test one.
90
102
  """
91
103
  from tests.backends import preflight
92
104
 
93
105
  preflight()
94
106
 
107
+ from coord import db as db_mod
108
+
109
+ db_mod.override_connection(db_mod._pytest_gap_sentinel())
110
+
95
111
 
96
112
  @pytest.fixture(autouse=True)
97
113
  def _non_terminal_work(monkeypatch):
@@ -1111,6 +1127,18 @@ def coord_db():
1111
1127
  # already-closed connection is a no-op on both drivers).
1112
1128
  session.close()
1113
1129
  db.close()
1130
+ # #3385: `db.close()` just reset the singleton to plain `None` --
1131
+ # reopening the gap #1960's guard exists to close, one layer up.
1132
+ # Anything that calls `coord.db.get_connection()` between THIS
1133
+ # test's teardown finishing and the NEXT test's `coord_db` setup
1134
+ # installing its own override (a background thread a prior test
1135
+ # spawned and never joined, a fixture that reaches coord.db before
1136
+ # this one runs) would otherwise fall through to `_open()` and could
1137
+ # reach the real `~/.coord/coord.db`. Installing the sentinel here
1138
+ # closes that window; the next test's `coord_db` setup overwrites it
1139
+ # with a fresh real override before that test's body ever runs, same
1140
+ # as always.
1141
+ db.override_connection(db._pytest_gap_sentinel())
1114
1142
 
1115
1143
 
1116
1144
  # Every module-attribute name that coord.db / coord.state / coord.config /
@@ -1100,6 +1100,77 @@ class TestOverrideConnection:
1100
1100
  _ensure_schema(sqlite3.connect(":memory:"))
1101
1101
 
1102
1102
 
1103
+ # ── pytest-gap sentinel (#3385) ──────────────────────────────────────────────
1104
+ #
1105
+ # #3385: `main`'s `Tests` workflow was red for 33 days with thousands of
1106
+ # `ProductionDatabaseGuardError`s, and #3380's daemon-lifespan-shutdown fix
1107
+ # left the count unchanged -- because the actual gap is in `coord.db`'s
1108
+ # connection singleton itself, not the daemon: `tests/conftest.py`'s autouse
1109
+ # `coord_db` fixture only guarantees an isolated override while ONE test's
1110
+ # own setup/call/teardown phases are running. Its teardown used to call
1111
+ # `close()`, which resets `_conn` to plain `None` -- reopening the #1960 gap
1112
+ # one layer up for anything that calls `get_connection()` in the window
1113
+ # between one test's teardown and the next test's setup, or before the very
1114
+ # first test's setup has run at all. #1960's own `PYTEST_CURRENT_TEST` guard
1115
+ # inside `_open()` only protects that window if the env var happens to still
1116
+ # be set at that exact moment, which is not guaranteed. `_pytest_gap_
1117
+ # sentinel()` (installed by both `pytest_configure` and `coord_db`'s
1118
+ # teardown in `tests/conftest.py`) closes it unconditionally: `_conn` is
1119
+ # never plain `None` for the life of a pytest process, so `get_connection()`
1120
+ # can no longer fall through to `_open()` -- and therefore the real
1121
+ # `~/.coord/coord.db` -- while pytest is running, regardless of timing.
1122
+ class TestPytestGapSentinel:
1123
+ def test_any_attribute_access_raises_the_guard(self) -> None:
1124
+ sentinel = db_mod._pytest_gap_sentinel()
1125
+ with pytest.raises(db_mod.ProductionDatabaseGuardError, match="coord_db"):
1126
+ sentinel.execute("SELECT 1")
1127
+
1128
+ def test_probing_closed_also_raises(self) -> None:
1129
+ """`_connection_is_closed` -- the first thing `get_connection()` does
1130
+ with a cached connection -- reads `.closed` via
1131
+ `getattr(conn, "closed", False)`. The sentinel must not silently
1132
+ answer "not closed" here: that would let `get_connection()` hand the
1133
+ sentinel back as if it were a usable connection, deferring the
1134
+ failure to whatever statement runs next instead of raising at the
1135
+ point the gap was actually reached."""
1136
+ sentinel = db_mod._pytest_gap_sentinel()
1137
+ with pytest.raises(db_mod.ProductionDatabaseGuardError):
1138
+ db_mod._connection_is_closed(sentinel)
1139
+
1140
+ def test_get_connection_raises_instead_of_opening_the_real_path(self) -> None:
1141
+ """Simulates the exact gap #3385 closes: `_conn` holding the
1142
+ sentinel, as `coord_db`'s teardown (and `pytest_configure`, before
1143
+ the first test) now leave it, instead of plain `None`.
1144
+
1145
+ RED against the pre-#3385 shape (installing plain `None` here
1146
+ instead): `get_connection()` would fall through to `_open()`, whose
1147
+ only protection is whether `PYTEST_CURRENT_TEST` happens to be set at
1148
+ that exact moment -- true during this test's own body, so it would
1149
+ incidentally still raise here, just via a DIFFERENT code path (and
1150
+ not at all in the actual gap this issue is about, between two tests,
1151
+ which this single-test assertion cannot reach). GREEN here
1152
+ demonstrates the sentinel raises unconditionally, before `_open()`
1153
+ -- and therefore the real `~/.coord/coord.db` -- is ever reached,
1154
+ which is what actually closes the inter-test gap.
1155
+
1156
+ Restores the real per-test connection in a ``finally`` rather than
1157
+ via ``monkeypatch``: an earlier autouse fixture in
1158
+ ``tests/conftest.py`` already pulls the shared ``monkeypatch``
1159
+ instance's setup forward ahead of ``coord_db`` (see
1160
+ ``_no_frozen_coord_dir_constants``'s docstring), which pushes
1161
+ ``monkeypatch``'s own undo to AFTER ``coord_db``'s teardown -- so a
1162
+ ``monkeypatch.setattr`` here would leave the sentinel installed when
1163
+ ``coord_db``'s teardown tries to ``close()`` it.
1164
+ """
1165
+ original_conn = db_mod._conn
1166
+ db_mod.override_connection(db_mod._pytest_gap_sentinel())
1167
+ try:
1168
+ with pytest.raises(db_mod.ProductionDatabaseGuardError, match="coord_db"):
1169
+ db_mod.get_connection()
1170
+ finally:
1171
+ db_mod.override_connection(original_conn)
1172
+
1173
+
1103
1174
  # ── _resolve_store_target (#827) ─────────────────────────────────────────────
1104
1175
 
1105
1176
  _VALID_REPOS_MACHINES_YAML = (
@@ -1220,6 +1220,24 @@ def _record(a: Assignment) -> None:
1220
1220
  conn.commit()
1221
1221
 
1222
1222
 
1223
+ def _backdate_review_claim(of_assignment_id: str, *, seconds_ago: float) -> None:
1224
+ """Push a `review_claims` row's `claimed_at` into the past — used to put
1225
+ a claim outside #3383's grace period (real claims in these tests are
1226
+ taken via `state.claim_review_dispatch`, which stamps `time.time()`;
1227
+ without this every test claim looks "just taken", which is exactly the
1228
+ fresh-claim case the grace period is meant to protect)."""
1229
+ import time as _time
1230
+
1231
+ from coord.db import get_connection
1232
+
1233
+ conn = get_connection()
1234
+ conn.execute(
1235
+ "UPDATE review_claims SET claimed_at=? WHERE of_assignment_id=?",
1236
+ (_time.time() - seconds_ago, of_assignment_id),
1237
+ )
1238
+ conn.commit()
1239
+
1240
+
1223
1241
  def test_reset_review_real_db_deletes_review_when_latest_is_the_review_row(
1224
1242
  monkeypatch, config, coord_db
1225
1243
  ) -> None:
@@ -1381,6 +1399,141 @@ def test_diagnose_review_healthy_when_no_claim_leaked(
1381
1399
  assert any("healthy" in f for f in res.findings)
1382
1400
 
1383
1401
 
1402
+ def test_diagnose_review_detects_leaked_claim_with_no_review_rows(
1403
+ monkeypatch, config, coord_db
1404
+ ) -> None:
1405
+ """#3383 regression: a `review_claims` row held for a work assignment
1406
+ that has NO review/test-author/mock-author row AT ALL (the state one
1407
+ step earlier than #3206's terminal-row case) used to be unreachable —
1408
+ `stage_assignments(..., "review")` finds nothing, `latest is None`, and
1409
+ `diagnose_stage` took the "no review assignment on the board" early
1410
+ return before ever calling `_recover_review` (which is the only place
1411
+ that cross-checked `review_claims`). This left the claim permanently
1412
+ wedged with `coord diagnose --stage review --reset` reporting the stage
1413
+ healthy AND doing nothing. This reproduces against unfixed `main`: the
1414
+ old early return set `recovered=True` unconditionally with no claim
1415
+ check at all.
1416
+ """
1417
+ from coord import state
1418
+
1419
+ _stub(monkeypatch, session="dead")
1420
+ _record(_assign(
1421
+ aid="w1", typ="work", status="done", review_state="dispatched",
1422
+ dispatched_at=100.0,
1423
+ ))
1424
+ # Simulate the leak: a claim was taken (e.g. by a `dispatch_review` call
1425
+ # whose review row never landed, or was later deleted) and never
1426
+ # released — no review row exists to cross-check it against. Backdated
1427
+ # well past the #3383 grace period so it isn't mistaken for a claim an
1428
+ # in-flight `dispatch_review` just took (see the fresh-claim test below).
1429
+ assert state.claim_review_dispatch("w1") is True
1430
+ _backdate_review_claim("w1", seconds_ago=3600.0)
1431
+
1432
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1433
+
1434
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", dry_run=True)
1435
+
1436
+ assert res.recovered is False
1437
+ assert res.needs_reset is True
1438
+ assert any("review_claims" in f or "review-dispatch claim" in f for f in res.findings)
1439
+ # A dry-run must not touch the claim.
1440
+ assert state.claim_review_dispatch("w1") is False
1441
+
1442
+
1443
+ def test_reset_review_releases_leaked_claim_with_no_review_rows(
1444
+ monkeypatch, config, coord_db
1445
+ ) -> None:
1446
+ """#3383: `--reset` must actually clear the leaked claim detected above
1447
+ so `coord review <work-assignment-id>` becomes dispatchable again — the
1448
+ whole point of the issue (there was previously NO operator CLI path at
1449
+ all to clear this)."""
1450
+ from coord import state
1451
+
1452
+ _stub(monkeypatch, session="dead")
1453
+ _record(_assign(
1454
+ aid="w1", typ="work", status="done", review_state="dispatched",
1455
+ dispatched_at=100.0,
1456
+ ))
1457
+ assert state.claim_review_dispatch("w1") is True
1458
+ _backdate_review_claim("w1", seconds_ago=3600.0)
1459
+
1460
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1461
+
1462
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", reset=True)
1463
+
1464
+ assert res.reset_performed is True
1465
+ assert res.recovered is True
1466
+ # The claim is gone — a fresh claim attempt for "w1" must succeed again,
1467
+ # exactly like `dispatch_review` would need for a real re-dispatch.
1468
+ assert state.claim_review_dispatch("w1") is True
1469
+
1470
+
1471
+ def test_reset_review_reports_leaked_claim_delete_failure_when_row_survives(
1472
+ monkeypatch, config, coord_db
1473
+ ) -> None:
1474
+ """#3383 non-blocking review gap: `_leaked_review_claim_without_row`'s
1475
+ own release path has the same "trust the write, not a re-read" risk that
1476
+ `_do_reset`'s analogous #3206 terminal-row path already guards against
1477
+ (see `test_reset_review_reports_delete_failure_when_row_survives`
1478
+ above) — but nothing exercised it for this no-review-row shape. Simulate
1479
+ `release_review_dispatch_claim` reporting success while the claim is
1480
+ still present on re-read (mirrors the coord-tui#49 non-persisting write)
1481
+ and assert the action line is honest about it rather than claiming the
1482
+ claim is gone."""
1483
+ from coord import state
1484
+
1485
+ _stub(monkeypatch, session="dead")
1486
+ _record(_assign(
1487
+ aid="w1", typ="work", status="done", review_state="dispatched",
1488
+ dispatched_at=100.0,
1489
+ ))
1490
+ assert state.claim_review_dispatch("w1") is True
1491
+ _backdate_review_claim("w1", seconds_ago=3600.0)
1492
+
1493
+ # Simulate a release call that reports success but never actually
1494
+ # removes the row — `has_review_claim` still finds it on re-read.
1495
+ monkeypatch.setattr(state, "release_review_dispatch_claim", lambda *a, **k: None)
1496
+
1497
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1498
+
1499
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", reset=True)
1500
+
1501
+ assert res.reset_performed is False
1502
+ assert res.recovered is False
1503
+ assert res.needs_reset is True
1504
+ assert any(
1505
+ "did NOT persist" in f
1506
+ for f in res.findings
1507
+ )
1508
+ # Still held — the release never actually took.
1509
+ assert state.claim_review_dispatch("w1") is False
1510
+
1511
+
1512
+ def test_diagnose_review_fresh_claim_without_row_not_treated_as_leaked(
1513
+ monkeypatch, config, coord_db
1514
+ ) -> None:
1515
+ """Sibling of the two tests above: a claim taken only moments ago, with
1516
+ no review row yet, is indistinguishable from an in-flight
1517
+ `dispatch_review` call that has claimed but not yet inserted its review
1518
+ row — the same false-positive window `_recover_review` already
1519
+ documents for the terminal-row case (#3206), one state earlier. Must be
1520
+ reported but NOT offered for release while this fresh."""
1521
+ from coord import state
1522
+
1523
+ _stub(monkeypatch, session="dead")
1524
+ _record(_assign(aid="w1", typ="work", status="done", dispatched_at=100.0))
1525
+ assert state.claim_review_dispatch("w1") is True # claimed "just now"
1526
+
1527
+ board = Board(completed=[_assign(aid="w1", typ="work", status="done", dispatched_at=100.0)])
1528
+
1529
+ res = diagnose.diagnose_stage(board, config, "api", 42, "review", dry_run=True)
1530
+
1531
+ assert res.needs_reset is False
1532
+ assert any("in-flight dispatch_review" in f for f in res.findings)
1533
+ # Untouched — still held.
1534
+ assert state.claim_review_dispatch("w1") is False
1535
+
1536
+
1384
1537
  def test_reset_review_reports_delete_failure_when_row_survives(
1385
1538
  monkeypatch, config, coord_db
1386
1539
  ) -> None: