code-coordinator 0.5.492__tar.gz → 0.5.493__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.492 → code_coordinator-0.5.493}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/db.py +123 -0
  5. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/state.py +171 -29
  6. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_db.py +118 -0
  7. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_state.py +423 -0
  8. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.claude/commands/board.md +0 -0
  9. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.claude/commands/complete-session.md +0 -0
  10. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.claude/commands/coordinator.md +0 -0
  11. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.githooks/_lib.sh +0 -0
  12. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.githooks/post-checkout +0 -0
  13. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.githooks/post-commit +0 -0
  14. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.githooks/post-merge +0 -0
  15. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.github/coord-ci-acceptance.yml +0 -0
  17. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.github/workflows/auto-release.yml +0 -0
  18. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.github/workflows/publish.yml +0 -0
  19. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.github/workflows/test.yml +0 -0
  20. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/.gitignore +0 -0
  21. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/CLAUDE.md +0 -0
  22. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/GOAL.md +0 -0
  23. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/LICENSE +0 -0
  24. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/MANIFEST.in +0 -0
  25. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/README.md +0 -0
  26. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/SOURCES.txt +0 -0
  27. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/dependency_links.txt +0 -0
  28. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/entry_points.txt +0 -0
  29. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/requires.txt +0 -0
  30. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/scm_file_list.json +0 -0
  31. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/code_coordinator.egg-info/top_level.txt +0 -0
  32. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/__init__.py +0 -0
  33. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/_board_mapping.py +0 -0
  34. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/acceptance.py +0 -0
  35. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/acceptance_drivers.py +0 -0
  36. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/agent.py +0 -0
  37. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/agent_app.py +0 -0
  38. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/agent_update.py +0 -0
  39. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/agents/opencode/.gitignore +0 -0
  40. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/agents/opencode/agents/work.md +0 -0
  41. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/agents/opencode/routing.jsonc +0 -0
  42. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/approved_work.py +0 -0
  43. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/audit.py +0 -0
  44. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/auto_loop.py +0 -0
  45. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/backup.py +0 -0
  46. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/block_log.py +0 -0
  47. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/board_schema.py +0 -0
  48. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/board_service.py +0 -0
  49. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/board_wire.py +0 -0
  50. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/brain.py +0 -0
  51. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/branch_model.py +0 -0
  52. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/bug_intake.py +0 -0
  53. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/cargo_cache.py +0 -0
  54. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/ci_fix.py +0 -0
  55. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/ci_github.py +0 -0
  56. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/ci_gitlab.py +0 -0
  57. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/ci_store.py +0 -0
  58. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/claim.py +0 -0
  59. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/claude_setup_token.py +0 -0
  60. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/cli.py +0 -0
  61. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/client.py +0 -0
  62. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/codegen.py +0 -0
  63. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/__init__.py +0 -0
  64. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/_common.py +0 -0
  65. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/acceptance.py +0 -0
  66. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/agent_ops.py +0 -0
  67. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/audit.py +0 -0
  68. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/backup.py +0 -0
  69. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/codegen.py +0 -0
  71. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/dr.py +0 -0
  74. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/drive.py +0 -0
  75. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/drive_queue.py +0 -0
  76. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/gate_a.py +0 -0
  77. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/gates.py +0 -0
  78. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/issues.py +0 -0
  79. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/lifecycle.py +0 -0
  80. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/machine.py +0 -0
  81. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/merge.py +0 -0
  82. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/milestone.py +0 -0
  83. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/plan_followup.py +0 -0
  84. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/plans.py +0 -0
  85. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/portal.py +0 -0
  86. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/pr.py +0 -0
  87. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/release.py +0 -0
  88. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/repo.py +0 -0
  89. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/report.py +0 -0
  90. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/review.py +0 -0
  91. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/scorecard.py +0 -0
  92. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/sessions.py +0 -0
  93. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/setup.py +0 -0
  94. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/status.py +0 -0
  95. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/store_migrate.py +0 -0
  96. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/terminal.py +0 -0
  97. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/test_gate.py +0 -0
  98. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/commands/tui.py +0 -0
  99. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/comments.py +0 -0
  100. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/config.py +0 -0
  101. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/config_reload.py +0 -0
  102. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/confirm_test.py +0 -0
  103. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/conflict_fix.py +0 -0
  104. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dao.py +0 -0
  105. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dashboard/__init__.py +0 -0
  106. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dashboard/fixture.py +0 -0
  107. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dashboard/index.html +0 -0
  108. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dashboard/server.py +0 -0
  109. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dashboard/terminal.py +0 -0
  110. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dead_end.py +0 -0
  111. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/decomposition_chat.py +0 -0
  112. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/README.md +0 -0
  113. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-agent.service +0 -0
  114. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-backup.service +0 -0
  115. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-backup.timer +0 -0
  116. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.service +0 -0
  117. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.sh +0 -0
  118. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.timer +0 -0
  119. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-dr-verify.service +0 -0
  120. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-dr-verify.timer +0 -0
  121. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-drive-queue.service +0 -0
  122. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-drive-queue.timer +0 -0
  123. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-failure-notify.service +0 -0
  124. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-fleet-watchdog.service +0 -0
  125. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  126. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-notify.service +0 -0
  127. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-notify.timer +0 -0
  128. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-release-propagate.service +0 -0
  129. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-release-propagate.timer +0 -0
  130. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-release-window.service +0 -0
  131. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-release-window.timer +0 -0
  132. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-serve.service +0 -0
  133. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-web-dist-build.service +0 -0
  134. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-web-dist-build.timer +0 -0
  135. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy/coord-web.service +0 -0
  136. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy_manifest.py +0 -0
  137. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deploy_units.py +0 -0
  138. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deprecation_telemetry.py +0 -0
  139. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/deps.py +0 -0
  140. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/diagnose.py +0 -0
  141. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dispatch.py +0 -0
  142. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dispatch_liveness.py +0 -0
  143. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dist_name.py +0 -0
  144. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dr_promote.py +0 -0
  145. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/dr_verify.py +0 -0
  146. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/drive.py +0 -0
  147. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/drive_queue.py +0 -0
  148. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/drive_state.py +0 -0
  149. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/events.py +0 -0
  150. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/failure_class.py +0 -0
  151. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/failure_classifier.py +0 -0
  152. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/filelock.py +0 -0
  153. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/fleet_config_health.py +0 -0
  154. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/forge_availability.py +0 -0
  155. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/freshness.py +0 -0
  156. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/gate_a.py +0 -0
  157. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/gate_b.py +0 -0
  158. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/gate_snapshot.py +0 -0
  159. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/gates.py +0 -0
  160. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/gen_board_fixture.py +0 -0
  161. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/github_ops.py +0 -0
  162. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/github_throttle.py +0 -0
  163. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/goal.py +0 -0
  164. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/graph_health.py +0 -0
  165. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/__init__.py +0 -0
  166. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/aggregate.py +0 -0
  167. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/__init__.py +0 -0
  168. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/_ci_pin.py +0 -0
  169. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/agent_install.py +0 -0
  170. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/cargo_targets.py +0 -0
  171. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/claude_binary.py +0 -0
  172. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/config_drift.py +0 -0
  173. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  174. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/coord_web_ci_pin.py +0 -0
  175. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/deploy_lane_facts.py +0 -0
  176. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/disk.py +0 -0
  177. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/fleet_board.py +0 -0
  178. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  179. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/fleet_phantom.py +0 -0
  180. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/fleet_unit_drift.py +0 -0
  181. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/graph.py +0 -0
  182. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/graphify_cli.py +0 -0
  183. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/index_lock.py +0 -0
  184. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/issues_sync_staleness.py +0 -0
  185. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/plan_usage.py +0 -0
  186. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/pr_churn.py +0 -0
  187. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/release_cordon.py +0 -0
  188. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/repo_state.py +0 -0
  189. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/spawned_coord.py +0 -0
  190. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/stalled_pipeline.py +0 -0
  191. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/timer_active.py +0 -0
  192. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/toolchain.py +0 -0
  193. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/unit_drift.py +0 -0
  194. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/unit_enablement.py +0 -0
  195. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/wedged_drive_queue.py +0 -0
  196. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/checks/worktrees.py +0 -0
  197. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/cli.py +0 -0
  198. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/context.py +0 -0
  199. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/fleet_snapshot.py +0 -0
  200. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/models.py +0 -0
  201. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/pypi.py +0 -0
  202. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/registry.py +0 -0
  203. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/render.py +0 -0
  204. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/health/units.py +0 -0
  205. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/hooks.py +0 -0
  206. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/housekeeping.py +0 -0
  207. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/interactive.py +0 -0
  208. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/invariant_alarms.py +0 -0
  209. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/issue_store.py +0 -0
  210. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/issues_sync_status.py +0 -0
  211. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/liveness_auditor.py +0 -0
  212. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/machine_fault.py +0 -0
  213. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/machine_metrics.py +0 -0
  214. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/machine_onboard.py +0 -0
  215. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/machine_pause.py +0 -0
  216. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/machine_stats.py +0 -0
  217. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/merge_queue.py +0 -0
  218. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/milestone_chat.py +0 -0
  219. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/milestone_dispatch.py +0 -0
  220. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/milestone_gate.py +0 -0
  221. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/milestone_order.py +0 -0
  222. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/mock_author.py +0 -0
  223. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/models.py +0 -0
  224. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/network.py +0 -0
  225. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/new_issue_chat.py +0 -0
  226. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/__init__.py +0 -0
  227. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/baseline.py +0 -0
  228. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/cli.py +0 -0
  229. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/collect.py +0 -0
  230. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/digest.py +0 -0
  231. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/models.py +0 -0
  232. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/predicate.py +0 -0
  233. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/service.py +0 -0
  234. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/store.py +0 -0
  235. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notifier/transport.py +0 -0
  236. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/notify.py +0 -0
  237. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/openapi.py +0 -0
  238. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/overlap_fence.py +0 -0
  239. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/overlap_predict.py +0 -0
  240. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/parentage.py +0 -0
  241. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/parentage_github.py +0 -0
  242. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/pipeline.py +0 -0
  243. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/plan_parser.py +0 -0
  244. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/plans.py +0 -0
  245. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/platform_paths.py +0 -0
  246. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/portal_bridge.py +0 -0
  247. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/portal_store.py +0 -0
  248. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/portal_sync.py +0 -0
  249. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/pr_body_lint.py +0 -0
  250. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/prereqs.py +0 -0
  251. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/progress.py +0 -0
  252. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/providers/__init__.py +0 -0
  253. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/providers/base.py +0 -0
  254. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/providers/claude.py +0 -0
  255. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/providers/claude_pty.py +0 -0
  256. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/providers/opencode.py +0 -0
  257. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/queue_diagnose.py +0 -0
  258. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/reconcile.py +0 -0
  259. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/reconcile_tick.py +0 -0
  260. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/refine_chat.py +0 -0
  261. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/release_cordon.py +0 -0
  262. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/release_propagate.py +0 -0
  263. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/release_verify.py +0 -0
  264. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/release_window.py +0 -0
  265. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/repo_dormancy.py +0 -0
  266. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/repo_edit.py +0 -0
  267. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/repo_onboard.py +0 -0
  268. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/reports.py +0 -0
  269. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/rest_schema.py +0 -0
  270. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/revalidate.py +0 -0
  271. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/review.py +0 -0
  272. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/scorecard.py +0 -0
  273. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/self_health.py +0 -0
  274. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/serve_app.py +0 -0
  275. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  276. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  277. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  278. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  279. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  280. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/portal-followup/SKILL.md +0 -0
  281. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/release-now/SKILL.md +0 -0
  282. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  283. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  284. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/skills/update-issue/SKILL.md +0 -0
  285. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/smoke.py +0 -0
  286. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/spend_ceiling.py +0 -0
  287. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/split_work.py +0 -0
  288. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/sql.py +0 -0
  289. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/stage_projection.py +0 -0
  290. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/store_migrate.py +0 -0
  291. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/store_parity.py +0 -0
  292. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/templates/deploy-cloudflare.node.yml +0 -0
  293. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/test_author.py +0 -0
  294. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/test_chat.py +0 -0
  295. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/test_orchestrator.py +0 -0
  296. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/test_report.py +0 -0
  297. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/tui_release.py +0 -0
  298. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/uat_checks.py +0 -0
  299. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/usage.py +0 -0
  300. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/usage_limits.py +0 -0
  301. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/usage_rollup.py +0 -0
  302. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coord/worker_events.py +0 -0
  303. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/coordinator.example.yml +0 -0
  304. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-agent.service +0 -0
  305. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-backup.service +0 -0
  306. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-backup.timer +0 -0
  307. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-db-backup.service +0 -0
  308. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-db-backup.sh +0 -0
  309. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-db-backup.timer +0 -0
  310. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-dr-verify.service +0 -0
  311. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-dr-verify.timer +0 -0
  312. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-drive-queue.service +0 -0
  313. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-drive-queue.timer +0 -0
  314. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-failure-notify.service +0 -0
  315. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-failure-notify.sh +0 -0
  316. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-fleet-watchdog.service +0 -0
  317. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-fleet-watchdog.timer +0 -0
  318. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-notify.service +0 -0
  319. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-notify.timer +0 -0
  320. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-release-propagate.service +0 -0
  321. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-release-propagate.timer +0 -0
  322. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-release-window.service +0 -0
  323. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-release-window.timer +0 -0
  324. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-serve.service +0 -0
  325. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.service +0 -0
  326. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.sh +0 -0
  327. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.timer +0 -0
  328. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-web-rollback.sh +0 -0
  329. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/coord-web.service +0 -0
  330. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/deploy/node-shim.sh +0 -0
  331. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ADR_COORD_TUI_CI.md +0 -0
  332. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  333. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_CI.md +0 -0
  334. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_DIST.md +0 -0
  335. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  336. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/AGENT_OPERATIONS.md +0 -0
  337. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ARCHITECTURE.md +0 -0
  338. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ARCH_SECURITY_GATES.md +0 -0
  339. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/COCKPIT.md +0 -0
  340. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/CONTROL_CENTER.md +0 -0
  341. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/COST_DISCIPLINE.md +0 -0
  342. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/CROSS_PLATFORM.md +0 -0
  343. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/CUSTOMER_FACING_APPS.md +0 -0
  344. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/CUSTOMER_PORTAL.md +0 -0
  345. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/DATA_STORE_SELECTION.md +0 -0
  346. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/DISASTER_RECOVERY.md +0 -0
  347. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/DRIVE_QUEUE.md +0 -0
  348. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/EPHEMERAL_WORKERS.md +0 -0
  349. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/FORGE_MIGRATION.md +0 -0
  350. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/GRAPHIFY_SETUP.md +0 -0
  351. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ISSUE_GUIDANCE.md +0 -0
  352. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/MAC_MINI.md +0 -0
  353. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  354. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/NOTIFIER.md +0 -0
  355. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/OPENCODE_VERIFICATION.md +0 -0
  356. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/OPERATING_GOTCHAS.md +0 -0
  357. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/OPERATOR_GUIDES.md +0 -0
  358. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/ORACLE_LOOP.md +0 -0
  359. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/PHONE_WEBAPP.md +0 -0
  360. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/PIPELINE_V2.md +0 -0
  361. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/PLATFORM_EVOLUTION.md +0 -0
  362. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/SECOND_BACKEND.md +0 -0
  363. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/STORE_SERVICE.md +0 -0
  364. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  365. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/WEB_CONTROL_CENTER.md +0 -0
  366. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/WSL_WINDOWS_WORKER.md +0 -0
  367. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/mocks/web/README.md +0 -0
  368. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/mocks/web/_tokens.css +0 -0
  369. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/mocks/web/issue-detail.html +0 -0
  370. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/mocks/web/pipeline-narrow.html +0 -0
  371. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/docs/mocks/web/pipeline-wide.html +0 -0
  372. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/graphify-out/.gitignore +0 -0
  373. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/install-agent.sh +0 -0
  374. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/pyproject.toml +0 -0
  375. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/audit_review_verdict_overrides.py +0 -0
  376. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  377. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/build-worker-image.sh +0 -0
  378. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/coordinator-machine.py +0 -0
  379. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/dr-down.sh +0 -0
  380. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/dr-up.sh +0 -0
  381. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/epic-down.sh +0 -0
  382. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/epic-up.sh +0 -0
  383. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/preflight.sh +0 -0
  384. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/provision-server.sh +0 -0
  385. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/provision-worker.sh +0 -0
  386. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  387. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  388. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/throwaway-vm.sh +0 -0
  389. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/azure-workers/verify-github-token.sh +0 -0
  390. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/check_gh_argv_containment.py +0 -0
  391. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/codegen.py +0 -0
  392. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/coord-test-runner.sh +0 -0
  393. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  394. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  395. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  396. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  397. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/coord-venv-rollback.sh +0 -0
  398. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/drive-batch.sh +0 -0
  399. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/extract-coord-tui.sh +0 -0
  400. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/fleet_watchdog.py +0 -0
  401. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/gen_board_fixture.py +0 -0
  402. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/gen_mock_index.py +0 -0
  403. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/lib/provision-core.sh +0 -0
  404. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/next_release_tag.py +0 -0
  405. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/provision-machine.sh +0 -0
  406. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/run_tests_in_populated_home.sh +0 -0
  407. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/run_tests_without_gh.sh +0 -0
  408. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/setup-macmini.sh +0 -0
  409. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/smoke_437_interactive.py +0 -0
  410. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/verify-provision-noble.sh +0 -0
  411. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/verify_878_review_capture.py +0 -0
  412. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/verify_release_published.py +0 -0
  413. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/scripts/verify_release_wheel.py +0 -0
  414. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/setup.cfg +0 -0
  415. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/SMOKE_SET.md +0 -0
  416. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/__init__.py +0 -0
  417. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-37/conftest.py +0 -0
  418. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-37/contract.md +0 -0
  419. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-37/manifest.yml +0 -0
  420. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  421. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  422. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-51/contract.md +0 -0
  423. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  424. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  425. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-51/manifest.yml +0 -0
  426. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  427. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-51/tsconfig.json +0 -0
  428. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  429. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/backends.py +0 -0
  430. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/conftest.py +0 -0
  431. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/board-pipeline-basic.json +0 -0
  432. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  433. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  434. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  435. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  436. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/all_pass.json +0 -0
  437. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  438. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/mixed_fail.json +0 -0
  439. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  440. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  441. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/skip.json +0 -0
  442. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/playwright/truncated.json +0 -0
  443. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  444. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  445. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  446. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  447. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  448. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  449. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  450. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  451. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_acceptance.py +0 -0
  452. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_acceptance_drivers.py +0 -0
  453. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent.py +0 -0
  454. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_api_error.py +0 -0
  455. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_app.py +0 -0
  456. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_branch_base.py +0 -0
  457. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_branch_capture.py +0 -0
  458. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_config_free_1712.py +0 -0
  459. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_deploy_units_endpoint.py +0 -0
  460. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_dirty_worktree.py +0 -0
  461. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  462. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_graph_self_heal.py +0 -0
  463. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_health_h3.py +0 -0
  464. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_idle_restart.py +0 -0
  465. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_push_failure.py +0 -0
  466. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_reap.py +0 -0
  467. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_repos_and_pull.py +0 -0
  468. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_restart_services_endpoint.py +0 -0
  469. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_skills_self_heal.py +0 -0
  470. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_startup_diagnostics.py +0 -0
  471. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_update.py +0 -0
  472. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_update_bluegreen.py +0 -0
  473. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_usage_limit.py +0 -0
  474. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_agent_zero_commit.py +0 -0
  475. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ambient_home_isolation.py +0 -0
  476. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_approve_capability_reroute_3241.py +0 -0
  477. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_approve_dependency_busy_2804.py +0 -0
  478. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_approve_reject_plan.py +0 -0
  479. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_approve_usage_gate.py +0 -0
  480. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_approved_work_2532.py +0 -0
  481. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_approved_work_2996.py +0 -0
  482. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_assignment_already_recorded_daemon.py +0 -0
  483. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_audit_log.py +0 -0
  484. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_audit_outcome.py +0 -0
  485. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_audit_query.py +0 -0
  486. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_auto_loop.py +0 -0
  487. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_auto_release_publish_2035.py +0 -0
  488. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_backend_selection.py +0 -0
  489. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_backup.py +0 -0
  490. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_base_checkout_restore.py +0 -0
  491. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_block_log.py +0 -0
  492. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_cap_762.py +0 -0
  493. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_fixture.py +0 -0
  494. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_read_path.py +0 -0
  495. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_schema.py +0 -0
  496. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_service.py +0 -0
  497. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_state.py +0 -0
  498. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_board_wire.py +0 -0
  499. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_brain.py +0 -0
  500. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_branch_model.py +0 -0
  501. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_bug_intake.py +0 -0
  502. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_build_worker_image_env_update.py +0 -0
  503. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cargo_cache.py +0 -0
  504. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_check_gh_argv_containment.py +0 -0
  505. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ci_acceptance_gate_1950.py +0 -0
  506. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ci_fix.py +0 -0
  507. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ci_github.py +0 -0
  508. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ci_gitlab.py +0 -0
  509. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ci_parity_2091.py +0 -0
  510. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_ci_store.py +0 -0
  511. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_claim.py +0 -0
  512. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_claude_md_budget.py +0 -0
  513. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_claude_setup_token.py +0 -0
  514. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_acceptance.py +0 -0
  515. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_assign.py +0 -0
  516. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  517. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_assign_interactive_remote.py +0 -0
  518. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_assign_provider.py +0 -0
  519. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  520. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_audit.py +0 -0
  521. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_chat_continue.py +0 -0
  522. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_codegen.py +0 -0
  523. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_decide.py +0 -0
  524. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_diagnose_capability_rules.py +0 -0
  525. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_diagnose_config_provenance.py +0 -0
  526. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_diagnose_forge_availability.py +0 -0
  527. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_diagnose_graph.py +0 -0
  528. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_diagnose_self.py +0 -0
  529. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_diagnose_test_coverage.py +0 -0
  530. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_doctor.py +0 -0
  531. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_doctor_config_free_1801.py +0 -0
  532. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  533. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  534. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_drive.py +0 -0
  535. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_drive_queue.py +0 -0
  536. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_escalate.py +0 -0
  537. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_fix_headless_review.py +0 -0
  538. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_gate_a.py +0 -0
  539. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_install_drift.py +0 -0
  540. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_install_skills.py +0 -0
  541. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_issue_comment.py +0 -0
  542. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_issue_create_label.py +0 -0
  543. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_issue_reopen.py +0 -0
  544. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_issue_view_list.py +0 -0
  545. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_merge.py +0 -0
  546. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_assign.py +0 -0
  547. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_capture.py +0 -0
  548. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_chat_add_child.py +0 -0
  549. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_dispatch.py +0 -0
  550. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_gate_b.py +0 -0
  551. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_gate_c.py +0 -0
  552. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_order.py +0 -0
  553. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  554. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_milestone_ship.py +0 -0
  555. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_network.py +0 -0
  556. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_new_issue_chat.py +0 -0
  557. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_plans.py +0 -0
  558. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_portal.py +0 -0
  559. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_pr.py +0 -0
  560. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_pull_artifact.py +0 -0
  561. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_queue.py +0 -0
  562. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_reattach_sessions.py +0 -0
  563. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_refine_board.py +0 -0
  564. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_release_preflight.py +0 -0
  565. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_release_propagate.py +0 -0
  566. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_release_window.py +0 -0
  567. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_repo_2220.py +0 -0
  568. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  569. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_scorecard.py +0 -0
  570. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_serve_store_backend_3084.py +0 -0
  571. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_set_review_findings.py +0 -0
  572. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_advisory_terminal.py +0 -0
  573. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_contested_tag.py +0 -0
  574. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_invariant_alarms.py +0 -0
  575. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_machine_fault.py +0 -0
  576. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_merge_queue.py +0 -0
  577. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_provider.py +0 -0
  578. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_retried_3340.py +0 -0
  579. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_review_finalizing.py +0 -0
  580. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_test_failed_tag.py +0 -0
  581. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_status_usage_limit.py +0 -0
  582. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_sync_comments_873.py +0 -0
  583. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_test_plan.py +0 -0
  584. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_track.py +0 -0
  585. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_tui_update.py +0 -0
  586. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cli_wait.py +0 -0
  587. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_client.py +0 -0
  588. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_client_base_install.py +0 -0
  589. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_client_config_cache_atomic_3052.py +0 -0
  590. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_client_resource_migration_1946.py +0 -0
  591. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_commands_common.py +0 -0
  592. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_comments.py +0 -0
  593. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_completion_summary.py +0 -0
  594. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config.py +0 -0
  595. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config_acceptance.py +0 -0
  596. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config_audit.py +0 -0
  597. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config_drift_check.py +0 -0
  598. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config_pricing.py +0 -0
  599. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  600. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_config_usage_gate.py +0 -0
  601. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_confirm_test.py +0 -0
  602. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_conflict_fix.py +0 -0
  603. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_conflict_fix_semantic.py +0 -0
  604. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  605. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_test.py +0 -0
  606. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  607. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_test_runner_baseline.py +0 -0
  608. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_test_runner_populated_home.py +0 -0
  609. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_test_runner_routing.py +0 -0
  610. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_test_runner_toolchain.py +0 -0
  611. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_uat.py +0 -0
  612. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coord_web_sse_restart_live.py +0 -0
  613. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_coordinator_machine.py +0 -0
  614. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_cross_platform_imports.py +0 -0
  615. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dao.py +0 -0
  616. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dashboard.py +0 -0
  617. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dashboard_api.py +0 -0
  618. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dashboard_fixture.py +0 -0
  619. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dashboard_server.py +0 -0
  620. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dashboard_terminal.py +0 -0
  621. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dashboard_terminal_live.py +0 -0
  622. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dead_end.py +0 -0
  623. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_decomposition_chat.py +0 -0
  624. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_coord_db_backup.py +0 -0
  625. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_coord_web_dist.py +0 -0
  626. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_coord_web_rollback.py +0 -0
  627. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_db_backup_unit.py +0 -0
  628. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_drive_queue_unit.py +0 -0
  629. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_failure_notify_unit.py +0 -0
  630. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_manifest.py +0 -0
  631. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_notify_unit.py +0 -0
  632. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_units_lane.py +0 -0
  633. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deploy_web_unit.py +0 -0
  634. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deprecation_telemetry.py +0 -0
  635. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_deps.py +0 -0
  636. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_diagnose.py +0 -0
  637. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dispatch.py +0 -0
  638. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dispatch_liveness.py +0 -0
  639. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dispatch_target_validation.py +0 -0
  640. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dispatch_workers.py +0 -0
  641. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dist_name.py +0 -0
  642. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_done_housekeeping.py +0 -0
  643. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dr_azure_scripts.py +0 -0
  644. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dr_promote.py +0 -0
  645. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_dr_verify.py +0 -0
  646. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive.py +0 -0
  647. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_machine_fault.py +0 -0
  648. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_queue.py +0 -0
  649. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_queue_blocked_rendering.py +0 -0
  650. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_queue_launch_argv.py +0 -0
  651. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  652. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_queue_roll_pending.py +0 -0
  653. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  654. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_state.py +0 -0
  655. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_drive_tmux.py +0 -0
  656. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_epic_up_capability_detection.py +0 -0
  657. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  658. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_epic_up_image_provenance.py +0 -0
  659. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_errors.py +0 -0
  660. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_events.py +0 -0
  661. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_failure_class.py +0 -0
  662. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_failure_classifier.py +0 -0
  663. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_filelock.py +0 -0
  664. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  665. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_fix_escalation_classifier.py +0 -0
  666. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_fix_of_force_override.py +0 -0
  667. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_fleet_config_health.py +0 -0
  668. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_fleet_health_probes.py +0 -0
  669. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_fleet_health_snapshot.py +0 -0
  670. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_fleet_watchdog.py +0 -0
  671. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_forge_availability.py +0 -0
  672. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_freshness.py +0 -0
  673. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_gate_a.py +0 -0
  674. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_gate_b.py +0 -0
  675. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_gate_snapshot_staleness.py +0 -0
  676. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_gates.py +0 -0
  677. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  678. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_gen_mock_index.py +0 -0
  679. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_generated_rust_fixture.py +0 -0
  680. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_generated_rust_requests.py +0 -0
  681. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_generated_types_fixture.py +0 -0
  682. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_github_ops.py +0 -0
  683. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_github_throttle.py +0 -0
  684. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_goal.py +0 -0
  685. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_graph_health.py +0 -0
  686. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_graph_selfheal_absent_2237.py +0 -0
  687. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_handoff.py +0 -0
  688. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_checks.py +0 -0
  689. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_cli.py +0 -0
  690. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_cli_graph.py +0 -0
  691. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_config.py +0 -0
  692. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_context.py +0 -0
  693. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_coord_tui_ci_pin.py +0 -0
  694. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_coord_web_ci_pin.py +0 -0
  695. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_deploy_lane_facts.py +0 -0
  696. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_fix.py +0 -0
  697. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_incident_regression.py +0 -0
  698. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_issues_sync_staleness.py +0 -0
  699. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_pr_churn.py +0 -0
  700. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_pypi.py +0 -0
  701. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_registry.py +0 -0
  702. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_release_cordon_probe.py +0 -0
  703. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_timer_active.py +0 -0
  704. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_toolchain.py +0 -0
  705. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_unit_drift.py +0 -0
  706. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_unit_enablement.py +0 -0
  707. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_health_wedged_drive_queue.py +0 -0
  708. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_hooks.py +0 -0
  709. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_housekeeping.py +0 -0
  710. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_human_attended_437.py +0 -0
  711. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_init.py +0 -0
  712. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_install_agent_venv_2911.py +0 -0
  713. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_integration.py +0 -0
  714. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_briefing_echo.py +0 -0
  715. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_pane_log_2541.py +0 -0
  716. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_prefill_state.py +0 -0
  717. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_session_relaunch.py +0 -0
  718. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_test_verdict_backstop.py +0 -0
  719. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_token_attribution.py +0 -0
  720. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_interactive_worktree.py +0 -0
  721. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_invariant_alarms.py +0 -0
  722. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_issue_store_seam.py +0 -0
  723. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_issues_sync_status.py +0 -0
  724. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_liveness_auditor.py +0 -0
  725. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_liveness_notify.py +0 -0
  726. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_lock_contention_ratchet.py +0 -0
  727. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_machine_fault.py +0 -0
  728. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_machine_metrics.py +0 -0
  729. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_machine_onboard.py +0 -0
  730. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_machine_pause.py +0 -0
  731. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_machine_stats.py +0 -0
  732. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_merge_queue.py +0 -0
  733. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.492 → code_coordinator-0.5.493}/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.492
3
+ Version: 0.5.493
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.492
3
+ Version: 0.5.493
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.492",
2
+ "tag": "0.5.493",
3
3
  "distance": 0,
4
- "node": "gf825ecb0009197eb0b97ba8d836676c545ec6a00",
4
+ "node": "g21581c4b4d4c5107d3a7da2aefbfdfbd93aeee1e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-18"
@@ -666,6 +666,129 @@ def rollback_after_driver_error(conn: Any | None, exc: BaseException) -> None:
666
666
  pass
667
667
 
668
668
 
669
+ def undo_pending_write(conn: Any | None, exc: BaseException, *, undo: Callable[[], Any]) -> None:
670
+ """Run *undo* — a compensating statement touching only THIS write's own
671
+ row — after *exc*, the #3382 sibling of
672
+ :func:`rollback_after_driver_error` for a writer whose own
673
+ ``conn.commit()`` call, not just the statement before it, can raise.
674
+
675
+ :func:`rollback_after_driver_error` deliberately no-ops for a plain
676
+ SQLite error (see its docstring): that is correct when the failure is a
677
+ STATEMENT that never got to write anything — SQLite's ``SQLITE_BUSY``,
678
+ hit while acquiring the lock a write needs, leaves nothing applied, so
679
+ simply re-running the whole write closure from scratch (what
680
+ :func:`retry_on_locked` does) is exactly as good as a rollback.
681
+
682
+ That reasoning does not hold when it is ``conn.commit()`` itself that
683
+ raises. WAL-checkpoint contention can make ``COMMIT`` hit
684
+ ``SQLITE_BUSY`` *after* the statement(s) before it already applied
685
+ inside the still-open transaction — the write is neither committed nor
686
+ undone, so it sits there, genuinely pending, on ``coord.db``'s shared
687
+ process-wide connection, ready for a completely unrelated handler's next
688
+ unrelated ``commit()`` to durably persist it later. #3382: this is
689
+ exactly how a ``review_claims`` row survived two callers who each saw
690
+ their own ``/review-claim`` POST fail with a 503 — neither call's own
691
+ retry-free write had anything guarding its ``commit()``, so the pending
692
+ insert outlived both failed calls and was swept up by a later,
693
+ completely unrelated write on the same shared connection.
694
+
695
+ A bare retry of the closure does not fix this the way it fixes a failed
696
+ statement, either: an ``INSERT OR IGNORE`` re-run against its own
697
+ still-pending prior insert reads back as a conflict (``rowcount == 0``),
698
+ so the retry silently misreports "someone else already holds this
699
+ claim" about a claim only this process's own earlier, abandoned attempt
700
+ took.
701
+
702
+ **Why a compensating statement, and not a transaction-level undo of any
703
+ kind (#3382 review rounds 1 and 2).** Two earlier shapes of this
704
+ function were both rejected, for the same underlying reason:
705
+
706
+ * ``conn.rollback()`` (round 1). On ``coord.db``'s shared, process-wide
707
+ SQLite singleton (see this module's own docstring), that discards
708
+ *every* other thread's not-yet-committed statement too — this process
709
+ dispatches other ``_*_local`` writers through ``run_in_threadpool`` on
710
+ real OS worker threads (the daemon's periodic tick, the ``/board``
711
+ build, ``/assignment/*`` handlers), and Python's ``sqlite3`` joins ANY
712
+ thread's statement issued on this one connection between commits into
713
+ the SAME open transaction. An unrelated writer that already got
714
+ ``sql.execute``/``sql.insert_ignore``'s success back (nothing in this
715
+ tree commits internally — see ``coord/sql.py``) then silently loses it
716
+ when its own later ``conn.commit()`` no-ops or raises ``cannot commit
717
+ - no transaction is active`` — this issue's own second logged symptom.
718
+
719
+ * ``SAVEPOINT`` + ``ROLLBACK TO SAVEPOINT`` (round 2), whether the
720
+ savepoint name is a shared literal or made unique per call. Unique
721
+ names fix only the narrower half of the problem (two concurrent calls
722
+ resolving each other's marker, since SQLite binds a name to the most
723
+ recently established savepoint of that name). They do **not** fix the
724
+ half that matters: ``ROLLBACK TO SAVEPOINT`` reverts the database to
725
+ its state *just after that savepoint was established*, so it undoes
726
+ every statement issued since — including another thread's, which this
727
+ writer has no business undoing — and destroys that thread's own
728
+ savepoints along the way. Verified against a real ``sqlite3``
729
+ connection (Python 3.12, SQLite 3.45): with two distinctly-named
730
+ savepoints opened back to back and one row inserted after each,
731
+ ``ROLLBACK TO`` the OUTER (uniquely-named) savepoint removes BOTH
732
+ rows. A transaction-scoped undo simply cannot express "mine only" on a
733
+ connection several threads write through.
734
+
735
+ So the undo is row-scoped instead: *undo* issues one statement that
736
+ names this write's own row and nothing else (delete the row this call
737
+ inserted, identified by its own ``claimed_at`` stamp; re-insert the row
738
+ this call deleted, with the ``claimed_at`` it read back first). It is
739
+ exact regardless of how other threads' statements interleave with this
740
+ one — before the failure or after it — because it never refers to their
741
+ rows.
742
+
743
+ It also degrades better than a transaction-level undo when an unrelated
744
+ thread's ``commit()`` lands *between* this write's statement and this
745
+ recovery: a savepoint would already have been destroyed by that commit
746
+ (``COMMIT`` releases all savepoints), leaving ``ROLLBACK TO`` to fail
747
+ and this write's row durably committed and leaked — precisely the
748
+ incident. The compensating statement instead stays pending and is
749
+ flushed by whichever ``commit()`` reaches it next (this closure's own
750
+ retry, or another writer's), so the net effect on this row is still
751
+ nothing.
752
+
753
+ Call this from the ``except sql.driver_errors():`` block of a write
754
+ closure that both executes a statement *and* calls ``conn.commit()``
755
+ itself, and **only when that closure's own statement actually applied**
756
+ (``cursor.rowcount``) — a statement that failed applied nothing, so
757
+ there is nothing to compensate, the same "a failed STATEMENT applies
758
+ nothing" reasoning :func:`rollback_after_driver_error` already
759
+ documents. Today's callers are the ``review_claims``/``smoke_claims``
760
+ claim and release writes in ``coord/state.py`` (#3113/#3333), the two
761
+ sites where "did this claim land" is an exclusive-ownership decision the
762
+ rest of the system relies on, unlike most of this module's writers where
763
+ a duplicate-on-retry UPDATE/DELETE is harmless.
764
+
765
+ Unlike :func:`rollback_after_driver_error`, this does not inspect *exc*
766
+ for a SQLSTATE: the plain-SQLite case above is exactly what it exists to
767
+ cover. On Postgres it is a harmless no-op in practice — a failed
768
+ ``COMMIT`` there aborts the whole transaction (so *undo* raises
769
+ ``InFailedSqlTransaction``, suppressed below) and
770
+ :func:`retry_on_locked`'s own :func:`rollback_after_driver_error` call
771
+ has already undone this write for real; ``get_connection()`` also hands
772
+ each THREAD its own connection there (see this module's docstring), so
773
+ no other thread's statement was ever at risk.
774
+
775
+ Same suppression rule as :func:`rollback_after_driver_error`: a ``None``
776
+ *conn* is a no-op, and a failure of *undo* itself is swallowed so it
777
+ never masks *exc*, the exception actually worth seeing. If the
778
+ compensating statement cannot run either (sustained contention
779
+ outlasting even this), this write's own row is left pending for the next
780
+ writer's eventual commit/rollback to resolve — the same residual,
781
+ already-accepted risk :func:`rollback_after_driver_error`'s own
782
+ suppressed-failure path carries today, not a new one.
783
+ """
784
+ if conn is None:
785
+ return
786
+ try:
787
+ undo()
788
+ except Exception: # noqa: BLE001 — never mask the caught driver error
789
+ pass
790
+
791
+
669
792
  # #2538: a handful of consecutive short retries — long enough to ride out a
670
793
  # concurrent writer (the daemon's own passive tick, another `coord merge`/
671
794
  # `coord notify` invocation) that only holds the DB for a moment, short
@@ -52,6 +52,7 @@ from coord.db import (
52
52
  is_lock_contention_error,
53
53
  retry_on_locked,
54
54
  rollback_after_driver_error,
55
+ undo_pending_write,
55
56
  )
56
57
  from coord.models import (
57
58
  WORK_LIKE_TYPES,
@@ -2629,15 +2630,63 @@ def _claim_review_dispatch_local(of_assignment_id: str) -> bool:
2629
2630
  """Local-DB write for :func:`claim_review_dispatch`.
2630
2631
 
2631
2632
  Called directly by the daemon endpoint so it never re-routes back over
2632
- HTTP — mirrors every other ``_*_local`` write in this module.
2633
+ HTTP — mirrors every other ``_*_local`` write in this module. The
2634
+ ``/review-claim`` endpoint itself calls this synchronously, not via
2635
+ ``run_in_threadpool`` — the two review-claim endpoints can't race each
2636
+ other's writes — but ``coord.db.get_connection()``'s connection is the
2637
+ same process-wide SQLite singleton every OTHER ``_*_local`` writer this
2638
+ process dispatches through ``run_in_threadpool`` on a real OS worker
2639
+ thread uses too (#3382 review).
2640
+
2641
+ #3382: wrapped in :func:`coord.db.retry_on_locked`, unlike this
2642
+ function's original shape which had no lock-contention handling at all
2643
+ — a `database is locked` collision raised straight out to the caller as
2644
+ a 503 with nothing retried. On top of the retry, when the `INSERT OR
2645
+ IGNORE` applied but the `conn.commit()` after it raised, the closure
2646
+ undoes its own just-inserted row via
2647
+ :func:`coord.db.undo_pending_write` before re-raising — see that
2648
+ function's docstring for why the undo is a compensating statement
2649
+ naming THIS row rather than any transaction-level rollback (neither a
2650
+ bare ``conn.rollback()`` nor ``ROLLBACK TO SAVEPOINT`` can express
2651
+ "mine only" on a connection several threads write through). Without it,
2652
+ a `conn.commit()` failure leaves a just-applied insert pending on the
2653
+ shared connection for a wholly unrelated handler's next commit to
2654
+ durably persist later — the incident this issue reports, a
2655
+ `review_claims` row held by neither of the two calls that raced for it,
2656
+ wedging vimcode#1086's review for ~13.5h.
2633
2657
  """
2634
- conn = get_connection()
2635
- cur = sql.insert_ignore(
2636
- conn, "review_claims", ["of_assignment_id", "claimed_at"],
2637
- (of_assignment_id, time.time()),
2638
- )
2639
- conn.commit()
2640
- return (cur.rowcount or 0) > 0
2658
+
2659
+ def _write() -> int:
2660
+ conn = get_connection()
2661
+ claimed_at = time.time()
2662
+ inserted = 0
2663
+ try:
2664
+ cur = sql.insert_ignore(
2665
+ conn, "review_claims", ["of_assignment_id", "claimed_at"],
2666
+ (of_assignment_id, claimed_at),
2667
+ )
2668
+ inserted = cur.rowcount or 0
2669
+ conn.commit()
2670
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
2671
+ if inserted:
2672
+ # Only this call's own row: `claimed_at` is the stamp THIS
2673
+ # attempt generated, so a claim another process legitimately
2674
+ # holds (different stamp) is never touched. `inserted == 0`
2675
+ # means the insert either lost the race or never applied at
2676
+ # all — nothing of ours to compensate for.
2677
+ undo_pending_write(
2678
+ conn, exc,
2679
+ undo=lambda: sql.execute(
2680
+ conn,
2681
+ "DELETE FROM review_claims "
2682
+ "WHERE of_assignment_id=? AND claimed_at=?",
2683
+ (of_assignment_id, claimed_at),
2684
+ ),
2685
+ )
2686
+ raise
2687
+ return inserted
2688
+
2689
+ return retry_on_locked(_write) > 0
2641
2690
 
2642
2691
 
2643
2692
  def has_review_claim(of_assignment_id: str) -> bool:
@@ -2730,11 +2779,48 @@ def _release_review_dispatch_claim_local(of_assignment_id: str) -> None:
2730
2779
  Called directly by the daemon endpoint so it never re-routes back over
2731
2780
  HTTP, and by ``coord.issue_store._update_local_state`` (which always runs
2732
2781
  against whatever DB is local to that process — the canonical one, when
2733
- that process is the daemon or a non-thin-client host).
2782
+ that process is the daemon or a non-thin-client host, and which CAN run
2783
+ on a ``run_in_threadpool`` worker thread — #3382 review).
2784
+
2785
+ #3382: same `retry_on_locked` + undo-this-row-on-commit-failure
2786
+ treatment as :func:`_claim_review_dispatch_local` — see that function's
2787
+ docstring and :func:`coord.db.undo_pending_write`'s for why the undo is
2788
+ a compensating statement rather than any transaction-level rollback.
2789
+ This write had neither before, and a lock collision here left a stray
2790
+ `DELETE` pending on the shared connection for the same reason the claim
2791
+ write did — so the undo here is the mirror image: put back the ONE row
2792
+ this call deleted, with the `claimed_at` it read back before deleting,
2793
+ leaving every other row (and every other thread's pending statement)
2794
+ exactly as it found them.
2734
2795
  """
2735
- conn = get_connection()
2736
- sql.execute(conn, "DELETE FROM review_claims WHERE of_assignment_id=?", (of_assignment_id,))
2737
- conn.commit()
2796
+
2797
+ def _write() -> None:
2798
+ conn = get_connection()
2799
+ row = sql.execute(
2800
+ conn,
2801
+ "SELECT claimed_at FROM review_claims WHERE of_assignment_id=?",
2802
+ (of_assignment_id,),
2803
+ ).fetchone()
2804
+ claimed_at = row[0] if row is not None else None
2805
+ deleted = 0
2806
+ try:
2807
+ cur = sql.execute(
2808
+ conn, "DELETE FROM review_claims WHERE of_assignment_id=?", (of_assignment_id,)
2809
+ )
2810
+ deleted = cur.rowcount or 0
2811
+ conn.commit()
2812
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
2813
+ if deleted and claimed_at is not None:
2814
+ undo_pending_write(
2815
+ conn, exc,
2816
+ undo=lambda: sql.insert_ignore(
2817
+ conn, "review_claims", ["of_assignment_id", "claimed_at"],
2818
+ (of_assignment_id, claimed_at),
2819
+ ),
2820
+ )
2821
+ raise
2822
+
2823
+ retry_on_locked(_write)
2738
2824
 
2739
2825
 
2740
2826
  def release_review_claim_if_row_is_review(assignment_id: str) -> None:
@@ -2843,16 +2929,43 @@ def _claim_smoke_dispatch_local(work_assignment_id: str, capability_partition: s
2843
2929
  """Local-DB write for :func:`claim_smoke_dispatch`.
2844
2930
 
2845
2931
  Called directly by the daemon endpoint so it never re-routes back over
2846
- HTTP — mirrors :func:`_claim_review_dispatch_local`.
2932
+ HTTP — mirrors :func:`_claim_review_dispatch_local`, including its
2933
+ #3382 `retry_on_locked` + row-scoped
2934
+ :func:`coord.db.undo_pending_write` treatment: this write is the
2935
+ same "INSERT OR IGNORE, then commit" exclusive-claim shape, so it was
2936
+ exposed to the identical 503-after-successful-write class that issue
2937
+ reports for the review claim table, and to the same review-flagged risk
2938
+ of a transaction-level rollback discarding an unrelated writer's own
2939
+ pending statement on the shared connection.
2847
2940
  """
2848
- conn = get_connection()
2849
- cur = sql.insert_ignore(
2850
- conn, "smoke_claims",
2851
- ["work_assignment_id", "capability_partition", "claimed_at"],
2852
- (work_assignment_id, capability_partition, time.time()),
2853
- )
2854
- conn.commit()
2855
- return (cur.rowcount or 0) > 0
2941
+
2942
+ def _write() -> int:
2943
+ conn = get_connection()
2944
+ claimed_at = time.time()
2945
+ inserted = 0
2946
+ try:
2947
+ cur = sql.insert_ignore(
2948
+ conn, "smoke_claims",
2949
+ ["work_assignment_id", "capability_partition", "claimed_at"],
2950
+ (work_assignment_id, capability_partition, claimed_at),
2951
+ )
2952
+ inserted = cur.rowcount or 0
2953
+ conn.commit()
2954
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
2955
+ if inserted:
2956
+ undo_pending_write(
2957
+ conn, exc,
2958
+ undo=lambda: sql.execute(
2959
+ conn,
2960
+ "DELETE FROM smoke_claims WHERE work_assignment_id=? "
2961
+ "AND capability_partition=? AND claimed_at=?",
2962
+ (work_assignment_id, capability_partition, claimed_at),
2963
+ ),
2964
+ )
2965
+ raise
2966
+ return inserted
2967
+
2968
+ return retry_on_locked(_write) > 0
2856
2969
 
2857
2970
 
2858
2971
  def release_smoke_dispatch_claim(work_assignment_id: str, capability_partition: str) -> None:
@@ -2887,15 +3000,44 @@ def _release_smoke_dispatch_claim_local(
2887
3000
 
2888
3001
  Called directly by the daemon endpoint so it never re-routes back over
2889
3002
  HTTP, and by :func:`release_smoke_claim_if_row_is_smoke_leg` (which
2890
- always runs against whatever DB is local to that process).
3003
+ always runs against whatever DB is local to that process, and CAN run
3004
+ on a ``run_in_threadpool`` worker thread — #3382 review).
3005
+
3006
+ #3382: same `retry_on_locked` + undo-this-row-on-commit-failure
3007
+ treatment as :func:`_release_review_dispatch_claim_local`.
2891
3008
  """
2892
- conn = get_connection()
2893
- sql.execute(
2894
- conn,
2895
- "DELETE FROM smoke_claims WHERE work_assignment_id=? AND capability_partition=?",
2896
- (work_assignment_id, capability_partition),
2897
- )
2898
- conn.commit()
3009
+
3010
+ def _write() -> None:
3011
+ conn = get_connection()
3012
+ row = sql.execute(
3013
+ conn,
3014
+ "SELECT claimed_at FROM smoke_claims "
3015
+ "WHERE work_assignment_id=? AND capability_partition=?",
3016
+ (work_assignment_id, capability_partition),
3017
+ ).fetchone()
3018
+ claimed_at = row[0] if row is not None else None
3019
+ deleted = 0
3020
+ try:
3021
+ cur = sql.execute(
3022
+ conn,
3023
+ "DELETE FROM smoke_claims WHERE work_assignment_id=? AND capability_partition=?",
3024
+ (work_assignment_id, capability_partition),
3025
+ )
3026
+ deleted = cur.rowcount or 0
3027
+ conn.commit()
3028
+ except sql.driver_errors() as exc: # #2784: was sqlite3.OperationalError only
3029
+ if deleted and claimed_at is not None:
3030
+ undo_pending_write(
3031
+ conn, exc,
3032
+ undo=lambda: sql.insert_ignore(
3033
+ conn, "smoke_claims",
3034
+ ["work_assignment_id", "capability_partition", "claimed_at"],
3035
+ (work_assignment_id, capability_partition, claimed_at),
3036
+ ),
3037
+ )
3038
+ raise
3039
+
3040
+ retry_on_locked(_write)
2899
3041
 
2900
3042
 
2901
3043
  def release_smoke_claim_if_row_is_smoke_leg(assignment_id: str) -> None:
@@ -2835,6 +2835,124 @@ class TestRollbackAfterDriverError:
2835
2835
  assert conn.rollbacks == 1
2836
2836
 
2837
2837
 
2838
+ class _ExecuteAlwaysFailsConn:
2839
+ """Wraps a real connection: `cursor().execute()` always raises — stands
2840
+ in for a connection where even the compensating statement
2841
+ `undo_pending_write` issues hits sustained contention, for
2842
+ `TestUndoPendingWrite.test_a_failing_undo_never_masks_the_caught_error`.
2843
+ Deliberately does NOT delegate `cursor()` to the real connection (unlike
2844
+ `tests/test_state.py`'s `_CommitFlakyConn`, which only fakes
2845
+ `commit()`) — every statement this wrapper's cursor is asked to run
2846
+ fails, exactly like `_RollbackRecorder(fail=True)` did for the old
2847
+ unconditional-`conn.rollback()` shape this class replaces."""
2848
+
2849
+ __module__ = "sqlite3" # coord.sql.detect_dialect keys off this
2850
+
2851
+ class _FailingCursor:
2852
+ def execute(self, *_a, **_kw): # noqa: ANN002,ANN003,ANN201
2853
+ raise sqlite3.OperationalError("rollback itself failed")
2854
+
2855
+ def cursor(self): # noqa: ANN201
2856
+ return self._FailingCursor()
2857
+
2858
+
2859
+ class TestUndoPendingWrite:
2860
+ """#3382 review round 2: `db.undo_pending_write` runs a compensating
2861
+ statement naming THIS write's own row, not any transaction-level undo —
2862
+ neither `conn.rollback()` (round 1) nor `SAVEPOINT` +
2863
+ `ROLLBACK TO SAVEPOINT` (round 2) can express "mine only" on
2864
+ `coord.db`'s shared, process-wide SQLite singleton, which every other
2865
+ `_*_local` writer dispatched through `run_in_threadpool` also writes
2866
+ through. See the function's own docstring for the full incident."""
2867
+
2868
+ def _seed_unrelated_pending_write(self, conn: sqlite3.Connection, key: str) -> None:
2869
+ """A write pending on *conn*, uncommitted — mirrors another thread's
2870
+ own in-flight statement on the shared singleton."""
2871
+ conn.execute(f"INSERT INTO board_meta (key, value) VALUES ('{key}', 'pending')") # noqa: S608
2872
+
2873
+ def test_undoes_only_this_writes_own_row(
2874
+ self, isolated_conn: sqlite3.Connection,
2875
+ ) -> None:
2876
+ """Both halves of the hazard in one test: an unrelated writer's
2877
+ statement pending BEFORE this write's own (what round 1's bare
2878
+ `conn.rollback()` discarded) *and* one landing AFTER it (what a
2879
+ `ROLLBACK TO SAVEPOINT` would discard, uniquely-named or not — see
2880
+ `test_a_savepoint_scoped_undo_would_discard_a_later_write` below)
2881
+ must both survive, while this write's own row goes."""
2882
+ self._seed_unrelated_pending_write(isolated_conn, "before")
2883
+ isolated_conn.execute(
2884
+ "INSERT INTO board_meta (key, value) VALUES ('ours', 'should-vanish')"
2885
+ )
2886
+ self._seed_unrelated_pending_write(isolated_conn, "after")
2887
+
2888
+ db_mod.undo_pending_write(
2889
+ isolated_conn,
2890
+ sqlite3.OperationalError("database is locked"),
2891
+ undo=lambda: sql.execute(
2892
+ isolated_conn, "DELETE FROM board_meta WHERE key=?", ("ours",)
2893
+ ),
2894
+ )
2895
+
2896
+ # Both unrelated pending writes are untouched and still committable
2897
+ # by whoever's writes they actually are.
2898
+ isolated_conn.commit()
2899
+ rows = {
2900
+ r["key"]: r["value"]
2901
+ for r in isolated_conn.execute("SELECT key, value FROM board_meta").fetchall()
2902
+ }
2903
+ assert rows.get("before") == "pending"
2904
+ assert rows.get("after") == "pending"
2905
+ assert "ours" not in rows
2906
+
2907
+ def test_a_savepoint_scoped_undo_would_discard_a_later_write(
2908
+ self, isolated_conn: sqlite3.Connection,
2909
+ ) -> None:
2910
+ """Pins the premise of the design decision above, against the real
2911
+ driver rather than by assertion: `ROLLBACK TO SAVEPOINT` reverts the
2912
+ database to its state just after that savepoint, so it takes every
2913
+ statement issued since with it — including another thread's, and
2914
+ even when each thread uses its OWN distinctly-named savepoint (the
2915
+ round-2 review's suggested fix, which closes only the narrower
2916
+ name-collision half). If SQLite ever changed this, the comment
2917
+ trail in `db.undo_pending_write` would be wrong and this test is how
2918
+ we would find out."""
2919
+ sql.execute(isolated_conn, "SAVEPOINT sp_thread_a")
2920
+ sql.execute(isolated_conn, "SAVEPOINT sp_thread_b") # unique name, still nested
2921
+ isolated_conn.execute("INSERT INTO board_meta (key, value) VALUES ('a', 'x')")
2922
+ isolated_conn.execute("INSERT INTO board_meta (key, value) VALUES ('b', 'x')")
2923
+
2924
+ sql.execute(isolated_conn, "ROLLBACK TO SAVEPOINT sp_thread_a")
2925
+ sql.execute(isolated_conn, "RELEASE SAVEPOINT sp_thread_a")
2926
+ isolated_conn.commit()
2927
+
2928
+ keys = {
2929
+ r["key"] for r in isolated_conn.execute("SELECT key FROM board_meta").fetchall()
2930
+ }
2931
+ assert "a" not in keys
2932
+ assert "b" not in keys, (
2933
+ "thread B's row survived — SQLite's ROLLBACK TO semantics changed, "
2934
+ "and db.undo_pending_write's rationale needs revisiting"
2935
+ )
2936
+
2937
+ def test_none_connection_is_a_no_op(self) -> None:
2938
+ called: list[int] = []
2939
+ db_mod.undo_pending_write(
2940
+ None,
2941
+ sqlite3.OperationalError("database is locked"),
2942
+ undo=lambda: called.append(1),
2943
+ ) # must not raise
2944
+ assert called == []
2945
+
2946
+ def test_a_failing_undo_never_masks_the_caught_error(self) -> None:
2947
+ conn = _ExecuteAlwaysFailsConn()
2948
+
2949
+ db_mod.undo_pending_write(
2950
+ conn,
2951
+ sqlite3.OperationalError("database is locked"),
2952
+ undo=lambda: sql.execute(conn, "DELETE FROM board_meta WHERE key=?", ("ours",)),
2953
+ ) # must not raise, even though the compensating statement itself fails
2954
+
2955
+
2838
2956
  class TestBoardConnectionIfOpen:
2839
2957
  """`retry_on_locked`'s default connection resolution — it must never
2840
2958
  *open* one from inside an error handler."""