code-coordinator 0.5.214__tar.gz → 0.5.215__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 (804) hide show
  1. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/auto_loop.py +32 -4
  5. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/merge.py +18 -4
  6. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/db.py +53 -0
  7. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/state.py +16 -5
  8. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_auto_loop.py +100 -0
  9. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_fix.py +24 -0
  10. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_db.py +79 -1
  11. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_state.py +86 -0
  12. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/cargo-test.yml +0 -0
  23. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/release-tui.yml +0 -0
  25. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.github/workflows/test.yml +0 -0
  26. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/.gitignore +0 -0
  27. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/CLAUDE.md +0 -0
  28. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/GOAL.md +0 -0
  29. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/LICENSE +0 -0
  30. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/MANIFEST.in +0 -0
  31. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/README.md +0 -0
  32. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/SOURCES.txt +0 -0
  33. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/dependency_links.txt +0 -0
  34. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/entry_points.txt +0 -0
  35. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/requires.txt +0 -0
  36. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/scm_file_list.json +0 -0
  37. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/code_coordinator.egg-info/top_level.txt +0 -0
  38. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/__init__.py +0 -0
  39. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/_board_mapping.py +0 -0
  40. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/acceptance.py +0 -0
  41. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/acceptance_drivers.py +0 -0
  42. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agent.py +0 -0
  43. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agent_app.py +0 -0
  44. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agent_update.py +0 -0
  45. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agents/opencode/.gitignore +0 -0
  46. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agents/opencode/agents/work.md +0 -0
  47. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/agents/opencode/routing.jsonc +0 -0
  48. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/cli.py +0 -0
  63. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/client.py +0 -0
  64. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/__init__.py +0 -0
  65. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/_common.py +0 -0
  66. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/acceptance.py +0 -0
  67. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/agent_ops.py +0 -0
  68. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/audit.py +0 -0
  69. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/chat.py +0 -0
  70. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/dispatch.py +0 -0
  71. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/dispatch_workers.py +0 -0
  72. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/drive.py +0 -0
  73. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/drive_queue.py +0 -0
  74. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/milestone.py +0 -0
  79. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/plan_followup.py +0 -0
  80. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/plans.py +0 -0
  81. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/portal.py +0 -0
  82. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/release.py +0 -0
  83. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/repo.py +0 -0
  84. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/report.py +0 -0
  85. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/review.py +0 -0
  86. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/scorecard.py +0 -0
  87. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/sessions.py +0 -0
  88. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/setup.py +0 -0
  89. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/status.py +0 -0
  90. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/terminal.py +0 -0
  91. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/test_gate.py +0 -0
  92. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/commands/tui.py +0 -0
  93. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/comments.py +0 -0
  94. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/config.py +0 -0
  95. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/config_reload.py +0 -0
  96. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/confirm_test.py +0 -0
  97. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/conflict_fix.py +0 -0
  98. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dao.py +0 -0
  99. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/__init__.py +0 -0
  100. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/fixture.py +0 -0
  101. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/index.html +0 -0
  102. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/server.py +0 -0
  103. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dashboard/terminal.py +0 -0
  104. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dead_end.py +0 -0
  105. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/README.md +0 -0
  106. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-agent.service +0 -0
  107. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-db-backup.service +0 -0
  108. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-db-backup.sh +0 -0
  109. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-db-backup.timer +0 -0
  110. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-drive-queue.service +0 -0
  111. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-drive-queue.timer +0 -0
  112. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-notify.service +0 -0
  113. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-notify.timer +0 -0
  114. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-propagate.service +0 -0
  115. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-propagate.timer +0 -0
  116. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-window.service +0 -0
  117. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-release-window.timer +0 -0
  118. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-serve.service +0 -0
  119. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-web-dist-build.service +0 -0
  120. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-web-dist-build.timer +0 -0
  121. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy/coord-web.service +0 -0
  122. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy_manifest.py +0 -0
  123. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deploy_units.py +0 -0
  124. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/deps.py +0 -0
  125. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/diagnose.py +0 -0
  126. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dispatch.py +0 -0
  127. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/dist_name.py +0 -0
  128. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/drive.py +0 -0
  129. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/drive_queue.py +0 -0
  130. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/drive_state.py +0 -0
  131. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/events.py +0 -0
  132. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/failure_class.py +0 -0
  133. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/filelock.py +0 -0
  134. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/fleet_config_health.py +0 -0
  135. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/forge_availability.py +0 -0
  136. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/freshness.py +0 -0
  137. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gate_a.py +0 -0
  138. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gate_b.py +0 -0
  139. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gate_snapshot.py +0 -0
  140. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/gates.py +0 -0
  141. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/github_ops.py +0 -0
  142. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/goal.py +0 -0
  143. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/graph_health.py +0 -0
  144. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/__init__.py +0 -0
  145. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/aggregate.py +0 -0
  146. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/__init__.py +0 -0
  147. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/agent_install.py +0 -0
  148. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/cargo_targets.py +0 -0
  149. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/claude_binary.py +0 -0
  150. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/coord_web_ci_pin.py +0 -0
  151. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/deploy_lane_facts.py +0 -0
  152. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/disk.py +0 -0
  153. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_board.py +0 -0
  154. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  155. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_phantom.py +0 -0
  156. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/fleet_unit_drift.py +0 -0
  157. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/graph.py +0 -0
  158. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/graphify_cli.py +0 -0
  159. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/index_lock.py +0 -0
  160. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/plan_usage.py +0 -0
  161. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/repo_state.py +0 -0
  162. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/spawned_coord.py +0 -0
  163. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/timer_active.py +0 -0
  164. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/toolchain.py +0 -0
  165. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/unit_drift.py +0 -0
  166. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/unit_enablement.py +0 -0
  167. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/checks/worktrees.py +0 -0
  168. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/cli.py +0 -0
  169. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/context.py +0 -0
  170. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/fleet_snapshot.py +0 -0
  171. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/models.py +0 -0
  172. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/pypi.py +0 -0
  173. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/registry.py +0 -0
  174. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/render.py +0 -0
  175. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/health/units.py +0 -0
  176. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/hooks.py +0 -0
  177. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/housekeeping.py +0 -0
  178. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/interactive.py +0 -0
  179. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/issue_store.py +0 -0
  180. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/liveness_auditor.py +0 -0
  181. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/machine_pause.py +0 -0
  182. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/merge_queue.py +0 -0
  183. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_chat.py +0 -0
  184. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_dispatch.py +0 -0
  185. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_gate.py +0 -0
  186. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/milestone_order.py +0 -0
  187. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/mock_author.py +0 -0
  188. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/models.py +0 -0
  189. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/network.py +0 -0
  190. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/new_issue_chat.py +0 -0
  191. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/__init__.py +0 -0
  192. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/baseline.py +0 -0
  193. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/cli.py +0 -0
  194. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/collect.py +0 -0
  195. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/digest.py +0 -0
  196. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/models.py +0 -0
  197. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/predicate.py +0 -0
  198. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/service.py +0 -0
  199. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/store.py +0 -0
  200. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notifier/transport.py +0 -0
  201. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/notify.py +0 -0
  202. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/openapi.py +0 -0
  203. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/overlap_fence.py +0 -0
  204. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/overlap_predict.py +0 -0
  205. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/parentage.py +0 -0
  206. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/parentage_github.py +0 -0
  207. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/pipeline.py +0 -0
  208. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/plan_parser.py +0 -0
  209. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/plans.py +0 -0
  210. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/platform_paths.py +0 -0
  211. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/portal_bridge.py +0 -0
  212. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/portal_store.py +0 -0
  213. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/portal_sync.py +0 -0
  214. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/pr_body_lint.py +0 -0
  215. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/prereqs.py +0 -0
  216. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/progress.py +0 -0
  217. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/__init__.py +0 -0
  218. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/base.py +0 -0
  219. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/claude.py +0 -0
  220. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/claude_pty.py +0 -0
  221. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/providers/opencode.py +0 -0
  222. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/queue_diagnose.py +0 -0
  223. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/reconcile.py +0 -0
  224. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/reconcile_tick.py +0 -0
  225. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/refine_chat.py +0 -0
  226. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_cordon.py +0 -0
  227. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_propagate.py +0 -0
  228. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_verify.py +0 -0
  229. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/release_window.py +0 -0
  230. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/repo_edit.py +0 -0
  231. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/repo_onboard.py +0 -0
  232. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/reports.py +0 -0
  233. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/revalidate.py +0 -0
  234. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/review.py +0 -0
  235. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/scorecard.py +0 -0
  236. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/self_health.py +0 -0
  237. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/serve_app.py +0 -0
  238. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  239. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  240. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  241. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  242. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  243. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/portal-followup/SKILL.md +0 -0
  244. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  245. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  246. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/skills/update-issue/SKILL.md +0 -0
  247. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/smoke.py +0 -0
  248. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/spend_ceiling.py +0 -0
  249. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/split_work.py +0 -0
  250. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/stage_projection.py +0 -0
  251. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_author.py +0 -0
  252. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_chat.py +0 -0
  253. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_orchestrator.py +0 -0
  254. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/test_report.py +0 -0
  255. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/tui_release.py +0 -0
  256. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/usage.py +0 -0
  257. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/usage_limits.py +0 -0
  258. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/usage_rollup.py +0 -0
  259. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coord/worker_events.py +0 -0
  260. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/coordinator.example.yml +0 -0
  261. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-agent.service +0 -0
  262. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-db-backup.service +0 -0
  263. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-db-backup.sh +0 -0
  264. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-db-backup.timer +0 -0
  265. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-drive-queue.service +0 -0
  266. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-drive-queue.timer +0 -0
  267. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-notify.service +0 -0
  268. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-notify.timer +0 -0
  269. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-propagate.service +0 -0
  270. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-propagate.timer +0 -0
  271. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-window.service +0 -0
  272. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-release-window.timer +0 -0
  273. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-serve.service +0 -0
  274. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-dist-build.service +0 -0
  275. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-dist-build.sh +0 -0
  276. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-dist-build.timer +0 -0
  277. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web-rollback.sh +0 -0
  278. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/coord-web.service +0 -0
  279. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/deploy/node-shim.sh +0 -0
  280. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  281. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ADR_COORD_WEB_CI.md +0 -0
  282. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ADR_COORD_WEB_DIST.md +0 -0
  283. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/AGENT_OPERATIONS.md +0 -0
  284. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ARCHITECTURE.md +0 -0
  285. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ARCH_SECURITY_GATES.md +0 -0
  286. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/COCKPIT.md +0 -0
  287. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/CONTROL_CENTER.md +0 -0
  288. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/COST_DISCIPLINE.md +0 -0
  289. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/CROSS_PLATFORM.md +0 -0
  290. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/CUSTOMER_PORTAL.md +0 -0
  291. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/DRIVE_QUEUE.md +0 -0
  292. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/EPHEMERAL_WORKERS.md +0 -0
  293. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/FORGE_MIGRATION.md +0 -0
  294. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/GRAPHIFY_SETUP.md +0 -0
  295. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ISSUE_GUIDANCE.md +0 -0
  296. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/MAC_MINI.md +0 -0
  297. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  298. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/NOTIFIER.md +0 -0
  299. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/OPENCODE_VERIFICATION.md +0 -0
  300. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/OPERATING_GOTCHAS.md +0 -0
  301. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/ORACLE_LOOP.md +0 -0
  302. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/PHONE_WEBAPP.md +0 -0
  303. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/PIPELINE_V2.md +0 -0
  304. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/PLATFORM_EVOLUTION.md +0 -0
  305. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/SECOND_BACKEND.md +0 -0
  306. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/STORE_SERVICE.md +0 -0
  307. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  308. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/WEB_CONTROL_CENTER.md +0 -0
  309. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/WSL_WINDOWS_WORKER.md +0 -0
  310. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/README.md +0 -0
  311. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/_tokens.css +0 -0
  312. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/issue-detail.html +0 -0
  313. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/pipeline-narrow.html +0 -0
  314. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/docs/mocks/web/pipeline-wide.html +0 -0
  315. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/graphify-out/.gitignore +0 -0
  316. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/install-agent.sh +0 -0
  317. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/pyproject.toml +0 -0
  318. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/audit_review_verdict_overrides.py +0 -0
  319. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  320. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/build-worker-image.sh +0 -0
  321. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/coordinator-machine.py +0 -0
  322. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/epic-down.sh +0 -0
  323. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/epic-up.sh +0 -0
  324. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/preflight.sh +0 -0
  325. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/provision-worker.sh +0 -0
  326. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  327. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  328. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/azure-workers/verify-github-token.sh +0 -0
  329. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/check_gh_argv_containment.py +0 -0
  330. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/codegen.py +0 -0
  331. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/coord-test-runner.sh +0 -0
  332. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/drive-batch.sh +0 -0
  333. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/gen_board_fixture.py +0 -0
  334. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/gen_mock_index.py +0 -0
  335. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/next_release_tag.py +0 -0
  336. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/run_tests_in_populated_home.sh +0 -0
  337. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/run_tests_without_gh.sh +0 -0
  338. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/smoke_437_interactive.py +0 -0
  339. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/verify_878_review_capture.py +0 -0
  340. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/verify_release_published.py +0 -0
  341. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/scripts/verify_release_wheel.py +0 -0
  342. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/setup.cfg +0 -0
  343. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/SMOKE_SET.md +0 -0
  344. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/__init__.py +0 -0
  345. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  346. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/contract.md +0 -0
  347. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/manifest.yml +0 -0
  348. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  349. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  350. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  351. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  352. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/conftest.py +0 -0
  353. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/contract.md +0 -0
  354. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/manifest.yml +0 -0
  355. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  356. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  357. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/contract.md +0 -0
  358. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/manifest.yml +0 -0
  359. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  360. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  361. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  362. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  363. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  364. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  365. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  366. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  367. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  368. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  369. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/contract.md +0 -0
  370. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  371. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  372. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/manifest.yml +0 -0
  373. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  374. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-51/tsconfig.json +0 -0
  375. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  376. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  377. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  378. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/contract.md +0 -0
  379. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  380. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/manifest.yml +0 -0
  381. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  382. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  383. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  384. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  385. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  386. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  387. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  388. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  389. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  390. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  391. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  392. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/contract.md +0 -0
  393. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  394. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  395. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  396. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  397. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  398. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  399. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/conftest.py +0 -0
  400. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/board-pipeline-basic.json +0 -0
  401. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  402. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  403. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  404. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  405. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/all_pass.json +0 -0
  406. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  407. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/mixed_fail.json +0 -0
  408. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  409. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  410. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/skip.json +0 -0
  411. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/playwright/truncated.json +0 -0
  412. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  413. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  414. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  415. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  416. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  417. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  418. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  419. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  420. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_acceptance.py +0 -0
  421. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_acceptance_drivers.py +0 -0
  422. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent.py +0 -0
  423. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_api_error.py +0 -0
  424. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_app.py +0 -0
  425. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_branch_base.py +0 -0
  426. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_branch_capture.py +0 -0
  427. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_config_free_1712.py +0 -0
  428. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_deploy_units_endpoint.py +0 -0
  429. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_dirty_worktree.py +0 -0
  430. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  431. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_graph_self_heal.py +0 -0
  432. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_health_h3.py +0 -0
  433. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_idle_restart.py +0 -0
  434. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_push_failure.py +0 -0
  435. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_reap.py +0 -0
  436. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_repos_and_pull.py +0 -0
  437. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_restart_services_endpoint.py +0 -0
  438. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_skills_self_heal.py +0 -0
  439. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_startup_diagnostics.py +0 -0
  440. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_update.py +0 -0
  441. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_update_bluegreen.py +0 -0
  442. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_usage_limit.py +0 -0
  443. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_agent_zero_commit.py +0 -0
  444. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ambient_home_isolation.py +0 -0
  445. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_approve_reject_plan.py +0 -0
  446. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_approve_usage_gate.py +0 -0
  447. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_assignment_already_recorded_daemon.py +0 -0
  448. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_audit_log.py +0 -0
  449. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_audit_outcome.py +0 -0
  450. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_audit_query.py +0 -0
  451. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_auto_release_publish_2035.py +0 -0
  452. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_base_checkout_restore.py +0 -0
  453. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_block_log.py +0 -0
  454. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_cap_762.py +0 -0
  455. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_fixture.py +0 -0
  456. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_read_path.py +0 -0
  457. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_service.py +0 -0
  458. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_state.py +0 -0
  459. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_board_wire.py +0 -0
  460. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_brain.py +0 -0
  461. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_branch_model.py +0 -0
  462. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_bug_intake.py +0 -0
  463. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_build_worker_image_env_update.py +0 -0
  464. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cargo_cache.py +0 -0
  465. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_check_gh_argv_containment.py +0 -0
  466. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_acceptance_gate_1950.py +0 -0
  467. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_gitlab.py +0 -0
  468. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_parity_2091.py +0 -0
  469. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_ci_store.py +0 -0
  470. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_claim.py +0 -0
  471. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_acceptance.py +0 -0
  472. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign.py +0 -0
  473. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  474. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_interactive_remote.py +0 -0
  475. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_provider.py +0 -0
  476. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  477. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_audit.py +0 -0
  478. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_chat_continue.py +0 -0
  479. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_decide.py +0 -0
  480. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_config_provenance.py +0 -0
  481. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_forge_availability.py +0 -0
  482. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_graph.py +0 -0
  483. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_diagnose_self.py +0 -0
  484. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_doctor.py +0 -0
  485. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_doctor_config_free_1801.py +0 -0
  486. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  487. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_drive.py +0 -0
  488. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_drive_queue.py +0 -0
  489. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_escalate.py +0 -0
  490. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_fix_headless_review.py +0 -0
  491. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_gate_a.py +0 -0
  492. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_install_drift.py +0 -0
  493. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_install_skills.py +0 -0
  494. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_issue_create_label.py +0 -0
  495. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_issue_reopen.py +0 -0
  496. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_merge.py +0 -0
  497. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_assign.py +0 -0
  498. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_capture.py +0 -0
  499. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_chat_add_child.py +0 -0
  500. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_dispatch.py +0 -0
  501. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_gate_b.py +0 -0
  502. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_gate_c.py +0 -0
  503. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_order.py +0 -0
  504. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  505. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_milestone_ship.py +0 -0
  506. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_network.py +0 -0
  507. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_new_issue_chat.py +0 -0
  508. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_plans.py +0 -0
  509. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_portal.py +0 -0
  510. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_pull_artifact.py +0 -0
  511. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_queue.py +0 -0
  512. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_reattach_sessions.py +0 -0
  513. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_refine_board.py +0 -0
  514. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_release_preflight.py +0 -0
  515. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_release_propagate.py +0 -0
  516. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_release_window.py +0 -0
  517. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_repo_2220.py +0 -0
  518. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_scorecard.py +0 -0
  519. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_set_review_findings.py +0 -0
  520. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_advisory_terminal.py +0 -0
  521. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_merge_queue.py +0 -0
  522. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_provider.py +0 -0
  523. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_review_finalizing.py +0 -0
  524. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_test_failed_tag.py +0 -0
  525. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_status_usage_limit.py +0 -0
  526. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_sync_comments_873.py +0 -0
  527. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_test_plan.py +0 -0
  528. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_track.py +0 -0
  529. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_tui_update.py +0 -0
  530. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cli_wait.py +0 -0
  531. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_client_base_install.py +0 -0
  532. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_comments.py +0 -0
  533. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_completion_summary.py +0 -0
  534. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config.py +0 -0
  535. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_acceptance.py +0 -0
  536. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_audit.py +0 -0
  537. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_pricing.py +0 -0
  538. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  539. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_config_usage_gate.py +0 -0
  540. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_confirm_test.py +0 -0
  541. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_conflict_fix.py +0 -0
  542. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_conflict_fix_semantic.py +0 -0
  543. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test.py +0 -0
  544. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_baseline.py +0 -0
  545. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_populated_home.py +0 -0
  546. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_routing.py +0 -0
  547. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_test_runner_toolchain.py +0 -0
  548. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coord_web_sse_restart_live.py +0 -0
  549. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_coordinator_machine.py +0 -0
  550. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_cross_platform_imports.py +0 -0
  551. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard.py +0 -0
  552. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard_fixture.py +0 -0
  553. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard_terminal.py +0 -0
  554. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dashboard_terminal_live.py +0 -0
  555. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dead_end.py +0 -0
  556. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_coord_db_backup.py +0 -0
  557. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_coord_web_dist.py +0 -0
  558. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_coord_web_rollback.py +0 -0
  559. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_drive_queue_unit.py +0 -0
  560. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_manifest.py +0 -0
  561. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_units_lane.py +0 -0
  562. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deploy_web_unit.py +0 -0
  563. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_deps.py +0 -0
  564. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_diagnose.py +0 -0
  565. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dispatch.py +0 -0
  566. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dispatch_target_validation.py +0 -0
  567. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_dist_name.py +0 -0
  568. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_done_housekeeping.py +0 -0
  569. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive.py +0 -0
  570. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive_queue.py +0 -0
  571. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive_state.py +0 -0
  572. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_drive_tmux.py +0 -0
  573. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_epic_up_capability_detection.py +0 -0
  574. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  575. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_epic_up_image_provenance.py +0 -0
  576. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_errors.py +0 -0
  577. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_events.py +0 -0
  578. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_failure_class.py +0 -0
  579. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_filelock.py +0 -0
  580. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  581. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fix_of_force_override.py +0 -0
  582. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fleet_config_health.py +0 -0
  583. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fleet_health_probes.py +0 -0
  584. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_fleet_health_snapshot.py +0 -0
  585. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_forge_availability.py +0 -0
  586. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_freshness.py +0 -0
  587. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gate_a.py +0 -0
  588. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gate_b.py +0 -0
  589. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gate_snapshot_staleness.py +0 -0
  590. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gates.py +0 -0
  591. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  592. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_gen_mock_index.py +0 -0
  593. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_generated_types_fixture.py +0 -0
  594. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_github_ops.py +0 -0
  595. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_goal.py +0 -0
  596. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_graph_health.py +0 -0
  597. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_graph_selfheal_absent_2237.py +0 -0
  598. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_handoff.py +0 -0
  599. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_checks.py +0 -0
  600. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_cli.py +0 -0
  601. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_cli_graph.py +0 -0
  602. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_config.py +0 -0
  603. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_context.py +0 -0
  604. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_coord_web_ci_pin.py +0 -0
  605. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_deploy_lane_facts.py +0 -0
  606. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_incident_regression.py +0 -0
  607. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_pypi.py +0 -0
  608. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_registry.py +0 -0
  609. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_timer_active.py +0 -0
  610. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_toolchain.py +0 -0
  611. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_unit_drift.py +0 -0
  612. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_health_unit_enablement.py +0 -0
  613. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_hooks.py +0 -0
  614. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_human_attended_437.py +0 -0
  615. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_init.py +0 -0
  616. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_integration.py +0 -0
  617. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_briefing_echo.py +0 -0
  618. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_prefill_state.py +0 -0
  619. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_session_relaunch.py +0 -0
  620. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_test_verdict_backstop.py +0 -0
  621. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_token_attribution.py +0 -0
  622. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_interactive_worktree.py +0 -0
  623. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_issue_store_seam.py +0 -0
  624. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_liveness_auditor.py +0 -0
  625. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_liveness_notify.py +0 -0
  626. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_machine_pause.py +0 -0
  627. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_merge_queue.py +0 -0
  628. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_merge_verify.py +0 -0
  629. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_chat.py +0 -0
  630. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_dispatch.py +0 -0
  631. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_gate.py +0 -0
  632. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_order.py +0 -0
  633. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_milestone_seam.py +0 -0
  634. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_mock_author.py +0 -0
  635. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_model_tiering.py +0 -0
  636. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_models.py +0 -0
  637. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_models_config_labels.py +0 -0
  638. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_needs_attention.py +0 -0
  639. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_network.py +0 -0
  640. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_new_issue_chat.py +0 -0
  641. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_next_release_tag.py +0 -0
  642. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_node_shim.py +0 -0
  643. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_baseline.py +0 -0
  644. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_cli.py +0 -0
  645. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_collect.py +0 -0
  646. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_config.py +0 -0
  647. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_drive_seam.py +0 -0
  648. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_isolation.py +0 -0
  649. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_predicate.py +0 -0
  650. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_quiet_hours.py +0 -0
  651. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notifier_service.py +0 -0
  652. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notify.py +0 -0
  653. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_notify_drain.py +0 -0
  654. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_openapi.py +0 -0
  655. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_operational_defaults.py +0 -0
  656. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_overlap_fence.py +0 -0
  657. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_overlap_predict.py +0 -0
  658. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_packaged_deploy_units.py +0 -0
  659. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_parentage.py +0 -0
  660. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_paste_landed.py +0 -0
  661. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_pipeline.py +0 -0
  662. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_followup_approve_plan_command.py +0 -0
  663. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_followup_pr_command.py +0 -0
  664. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_followup_review_command.py +0 -0
  665. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_only.py +0 -0
  666. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_plan_parser.py +0 -0
  667. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_platform_paths.py +0 -0
  668. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_bridge.py +0 -0
  669. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_config.py +0 -0
  670. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_store.py +0 -0
  671. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_portal_sync.py +0 -0
  672. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_pr_body_lint.py +0 -0
  673. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_prereqs.py +0 -0
  674. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_production_db_guard.py +0 -0
  675. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_progress.py +0 -0
  676. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_provider_seam.py +0 -0
  677. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_providers.py +0 -0
  678. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_providers_config_labels.py +0 -0
  679. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_providers_pty.py +0 -0
  680. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_quiet_hours.py +0 -0
  681. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_quiet_hours_store_2146.py +0 -0
  682. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reap_merged_sessions.py +0 -0
  683. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reap_stale_interactive_tick.py +0 -0
  684. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile.py +0 -0
  685. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_branch.py +0 -0
  686. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_completions.py +0 -0
  687. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_merges.py +0 -0
  688. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_no_agent_record.py +0 -0
  689. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_tick.py +0 -0
  690. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reconcile_usage_limit_done.py +0 -0
  691. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_refine_chat.py +0 -0
  692. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_2101.py +0 -0
  693. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  694. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_deadlock_2240.py +0 -0
  695. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_cordon_stuck_2490.py +0 -0
  696. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_propagate.py +0 -0
  697. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_unified_1242.py +0 -0
  698. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_verify.py +0 -0
  699. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_release_window.py +0 -0
  700. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_remote_auto_prune.py +0 -0
  701. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_remote_interactive_reaper.py +0 -0
  702. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_repo_edit_2220.py +0 -0
  703. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_repo_graph_fleet_2237.py +0 -0
  704. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_repo_onboard_2220.py +0 -0
  705. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_report_result_push.py +0 -0
  706. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_reports.py +0 -0
  707. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_retry.py +0 -0
  708. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_retry_advisory_1606.py +0 -0
  709. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_retry_type_1636.py +0 -0
  710. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_revalidate.py +0 -0
  711. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review.py +0 -0
  712. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_end_review_without_verdict.py +0 -0
  713. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_parse_failure_diagnostic.py +0 -0
  714. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_reaffirm.py +0 -0
  715. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_state.py +0 -0
  716. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_verdict_backstop.py +0 -0
  717. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_verdict_override_audit.py +0 -0
  718. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_verdict_relay.py +0 -0
  719. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_review_zero_commits.py +0 -0
  720. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_scoped_review_wiring.py +0 -0
  721. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_scorecard.py +0 -0
  722. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_self_health.py +0 -0
  723. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_serve.py +0 -0
  724. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_serve_app_board_trim.py +0 -0
  725. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_session.py +0 -0
  726. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_slice_issue_attribution.py +0 -0
  727. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_smoke.py +0 -0
  728. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_smoke_live_checkout_restore.py +0 -0
  729. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_smoke_workflow.py +0 -0
  730. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_spend_ceiling.py +0 -0
  731. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_spend_ceiling_coordinator.py +0 -0
  732. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_split.py +0 -0
  733. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_split_work.py +0 -0
  734. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stage_projection.py +0 -0
  735. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stalled_pipeline.py +0 -0
  736. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_state_review_findings_daemon.py +0 -0
  737. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_status_fleet_footer.py +0 -0
  738. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stop_1567.py +0 -0
  739. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_stuck.py +0 -0
  740. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_terminal_command.py +0 -0
  741. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_author.py +0 -0
  742. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_chat.py +0 -0
  743. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_orchestrator.py +0 -0
  744. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_report.py +0 -0
  745. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_verdict_parsing.py +0 -0
  746. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_test_verdict_transcript_floor.py +0 -0
  747. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_thin_client_board_audit.py +0 -0
  748. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_thin_client_config_load_1080.py +0 -0
  749. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_thin_client_daemon_routing_906.py +0 -0
  750. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_tmux_host.py +0 -0
  751. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_tmux_session.py +0 -0
  752. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_transcript_floor.py +0 -0
  753. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_usage.py +0 -0
  754. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_usage_limits.py +0 -0
  755. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_usage_rollup.py +0 -0
  756. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_venv_live_install_2121.py +0 -0
  757. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_version_single_source.py +0 -0
  758. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_watch.py +0 -0
  759. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  760. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_events.py +0 -0
  761. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_image_pin_sync.py +0 -0
  762. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_safety.py +0 -0
  763. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worker_test_scoping.py +0 -0
  764. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worktree.py +0 -0
  765. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  766. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/Cargo.lock +0 -0
  767. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/Cargo.toml +0 -0
  768. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/cargo-config-local-quadraui.toml.example +0 -0
  769. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/audit.rs +0 -0
  770. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/chat.rs +0 -0
  771. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/data.rs +0 -0
  772. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/dialogs.rs +0 -0
  773. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/doc_tabs.rs +0 -0
  774. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/drive.rs +0 -0
  775. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/drive_queue.rs +0 -0
  776. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/escalation.rs +0 -0
  777. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/events.rs +0 -0
  778. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fixtures.rs +0 -0
  779. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fleet_health.rs +0 -0
  780. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fleet_sessions.rs +0 -0
  781. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/fleet_terminals.rs +0 -0
  782. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/format.rs +0 -0
  783. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/milestone_dag.rs +0 -0
  784. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/mod.rs +0 -0
  785. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/msv.rs +0 -0
  786. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/pipeline.rs +0 -0
  787. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/plans.rs +0 -0
  788. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/render.rs +0 -0
  789. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/reports.rs +0 -0
  790. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/sessions.rs +0 -0
  791. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/settings_ui.rs +0 -0
  792. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/sidebar.rs +0 -0
  793. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/terminal.rs +0 -0
  794. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/tests.rs +0 -0
  795. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/types.rs +0 -0
  796. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/app/workspace.rs +0 -0
  797. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/bin/gtk.rs +0 -0
  798. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/commands.rs +0 -0
  799. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/lib.rs +0 -0
  800. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/main.rs +0 -0
  801. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/src/settings.rs +0 -0
  802. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/tests/acceptance.rs +0 -0
  803. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/tests/cli.rs +0 -0
  804. {code_coordinator-0.5.214 → code_coordinator-0.5.215}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.214
3
+ Version: 0.5.215
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.214
3
+ Version: 0.5.215
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.214",
2
+ "tag": "0.5.215",
3
3
  "distance": 0,
4
- "node": "g2e87641a37faa3849364d808e9047a3c9632f0c2",
4
+ "node": "g43e59d754122e055c18ab64170d43a1f2d7a4afd",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-21"
@@ -34,6 +34,7 @@ Data model:
34
34
  from __future__ import annotations
35
35
 
36
36
  import logging
37
+ import sqlite3
37
38
  import time
38
39
  import uuid
39
40
  from dataclasses import dataclass
@@ -1221,10 +1222,37 @@ def _dispatch_fix(
1221
1222
  )
1222
1223
  board.active.append(fix_assignment)
1223
1224
 
1224
- record_dispatched_assignment(
1225
- assignment=fix_assignment,
1226
- repo_github=repo.github,
1227
- )
1225
+ try:
1226
+ record_dispatched_assignment(
1227
+ assignment=fix_assignment,
1228
+ repo_github=repo.github,
1229
+ )
1230
+ except sqlite3.OperationalError as exc:
1231
+ if "database is locked" not in str(exc).lower():
1232
+ # Not the transient contention this guard exists for (#2538) —
1233
+ # a schema mismatch or malformed statement is a real bug and
1234
+ # must not be swallowed as an ordinary declined dispatch.
1235
+ raise
1236
+ # `record_dispatched_assignment` already retries transient
1237
+ # "database is locked" contention itself (coord.db.retry_on_locked,
1238
+ # via coord._record_dispatched_assignment_local) — this is only
1239
+ # reached once that bounded retry budget is exhausted. The fix
1240
+ # worker has already been POSTed to the agent above and is really
1241
+ # running; only the durable board-DB row failed to write. Treat it
1242
+ # the same as any other declined dispatch (no machine, agent
1243
+ # unreachable, …) rather than letting a transient lock crash the
1244
+ # whole caller (`coord merge`'s CI-fix queue, the review auto-loop,
1245
+ # …) — undo the in-memory append so a saved board never carries a
1246
+ # row this call never durably recorded, and let the caller's
1247
+ # existing "dispatch declined" handling take it from here.
1248
+ board.active.remove(fix_assignment)
1249
+ log.warning(
1250
+ "auto_loop: fix dispatch for %s hit persistent DB contention "
1251
+ "recording assignment %s (%s) — treating as not dispatched; "
1252
+ "will retry next run",
1253
+ work.assignment_id, fix_assignment.assignment_id, exc,
1254
+ )
1255
+ return None
1228
1256
  return fix_assignment
1229
1257
 
1230
1258
 
@@ -610,10 +610,24 @@ def _dispatch_ci_fixes(events, config, *, dry_run: bool) -> None:
610
610
  details={"reason": "ci_fix_retry_cap", "error": entry.error},
611
611
  )
612
612
  dispatched_any = True # the HUMAN_REQUIRED mutation needs saving
613
- # else: budget remains but dispatch declined for another reason (no
614
- # machine, an unrelated fix already in flight, agent unreachable) —
615
- # leave the entry PENDING for the next tick to retry, exactly like a
616
- # declined conflict-fix dispatch does.
613
+ else:
614
+ # Budget remains but dispatch declined for another reason (no
615
+ # machine, an unrelated fix already in flight, agent
616
+ # unreachable, or — #2538 — `_dispatch_fix` hit persistent
617
+ # "database is locked" contention recording the assignment
618
+ # after its own bounded retry budget was exhausted) — leave the
619
+ # entry PENDING for the next tick to retry, exactly like a
620
+ # declined conflict-fix dispatch does. Echoed (matching
621
+ # `_dispatch_conflict_fixes`'s equivalent branch) so an
622
+ # operator watching `coord merge` isn't left wondering why
623
+ # nothing happened for this entry — and so a transient DB lock
624
+ # collision on ONE entry is visibly a retry, not a silent drop,
625
+ # while every other entry keeps processing normally.
626
+ click.echo(
627
+ f" {entry.repo_name} #{entry.issue_number}: "
628
+ "ci-fix not dispatched (no machine / already in flight / "
629
+ "transient DB contention — will retry next run)"
630
+ )
617
631
  if dispatched_any:
618
632
  save_board(fix_board)
619
633
 
@@ -15,7 +15,9 @@ from __future__ import annotations
15
15
  import json
16
16
  import os
17
17
  import sqlite3
18
+ import time
18
19
  from pathlib import Path
20
+ from typing import Callable, TypeVar
19
21
 
20
22
  from coord.platform_paths import default_coord_dir
21
23
 
@@ -88,6 +90,57 @@ def close() -> None:
88
90
  _conn = None
89
91
 
90
92
 
93
+ _T = TypeVar("_T")
94
+
95
+ # #2538: a handful of consecutive short retries — long enough to ride out a
96
+ # concurrent writer (the daemon's own passive tick, another `coord merge`/
97
+ # `coord notify` invocation) that only holds the DB for a moment, short
98
+ # enough that a genuinely stuck lock still fails fast rather than hanging
99
+ # `coord merge` for a long time.
100
+ _LOCK_RETRY_ATTEMPTS = 5
101
+ _LOCK_RETRY_BASE_DELAY_S = 0.1
102
+
103
+
104
+ def retry_on_locked(
105
+ write: Callable[[], _T],
106
+ *,
107
+ attempts: int = _LOCK_RETRY_ATTEMPTS,
108
+ base_delay: float = _LOCK_RETRY_BASE_DELAY_S,
109
+ ) -> _T:
110
+ """Run *write* (a zero-arg callable performing one or more SQLite writes),
111
+ retrying with exponential backoff when SQLite raises ``database is
112
+ locked`` (#2538).
113
+
114
+ That error is transient contention — a concurrent writer holding the DB
115
+ at the exact moment this call tries to write, not a real failure — and a
116
+ short wait is very likely to let it clear. ``PRAGMA busy_timeout``
117
+ (set on every connection in :func:`_open`) already makes SQLite itself
118
+ wait before raising, but under sustained contention (several writers in
119
+ a tight loop) that single wait can still be exhausted; this adds a few
120
+ more short, backed-off attempts on top rather than failing on the first
121
+ collision.
122
+
123
+ Any other ``OperationalError`` (schema drift, a malformed statement, …)
124
+ is re-raised immediately without retrying — those are not transient, and
125
+ retrying would only delay surfacing a real bug. After *attempts*
126
+ consecutive ``database is locked`` collisions, re-raises the last
127
+ ``sqlite3.OperationalError`` so the caller can decide how to degrade
128
+ (see ``coord.state._record_dispatched_assignment_local``, whose caller —
129
+ ``coord.auto_loop._dispatch_fix`` — treats it as a declined dispatch
130
+ rather than letting it crash the whole run).
131
+ """
132
+ delay = base_delay
133
+ for attempt in range(1, attempts + 1):
134
+ try:
135
+ return write()
136
+ except sqlite3.OperationalError as exc:
137
+ if "database is locked" not in str(exc).lower() or attempt >= attempts:
138
+ raise
139
+ time.sleep(delay)
140
+ delay *= 2
141
+ raise AssertionError("unreachable") # loop above always returns or raises
142
+
143
+
91
144
  # ── Schema ────────────────────────────────────────────────────────────────────
92
145
 
93
146
  def _ensure_schema(conn: sqlite3.Connection) -> None:
@@ -37,7 +37,7 @@ from coord._board_mapping import (
37
37
  from coord.audit import record_audit as _record_audit
38
38
  from coord.board_service import resolve as _board_service_resolve
39
39
  from coord.board_service import route_write as _route_write
40
- from coord.db import get_connection
40
+ from coord.db import get_connection, retry_on_locked
41
41
  from coord.models import (
42
42
  WORK_LIKE_TYPES,
43
43
  Assignment,
@@ -1018,8 +1018,17 @@ def _record_dispatched_assignment_local(
1018
1018
  )
1019
1019
 
1020
1020
  conn = get_connection()
1021
- conn.execute(
1022
- """INSERT INTO assignments (
1021
+
1022
+ # #2538: this INSERT/commit is the one write in this function that's
1023
+ # actually load-bearing (unlike the best-effort `_record_audit` call
1024
+ # below it) — a concurrent writer (the daemon's own passive tick,
1025
+ # another `coord merge`/`coord notify` invocation) holding the DB for a
1026
+ # moment must not crash the caller. The statement is safe to retry
1027
+ # as-is: `assignment_id` is the primary key and the `ON CONFLICT ...
1028
+ # DO UPDATE` makes a re-attempted write idempotent.
1029
+ def _write() -> None:
1030
+ conn.execute(
1031
+ """INSERT INTO assignments (
1023
1032
  assignment_id, machine_name, repo_name, repo_github,
1024
1033
  issue_number, issue_title, status, type, briefing,
1025
1034
  files_allowed, model, dispatched_at, review_of_assignment_id,
@@ -1101,8 +1110,10 @@ def _record_dispatched_assignment_local(
1101
1110
  assignment.driven_by,
1102
1111
  assignment.dispatched_by_assignment_id,
1103
1112
  ),
1104
- )
1105
- conn.commit()
1113
+ )
1114
+ conn.commit()
1115
+
1116
+ retry_on_locked(_write)
1106
1117
  _record_audit(
1107
1118
  tier="business",
1108
1119
  category="dispatch",
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import sqlite3
5
6
  import uuid
6
7
  from dataclasses import replace
7
8
  from typing import Any
@@ -2402,6 +2403,105 @@ class TestDispatchFixRemoteBranchGuard:
2402
2403
  assert result.machine_name == "server"
2403
2404
 
2404
2405
 
2406
+ # ── #2538: persistent "database is locked" must decline, not crash ─────────
2407
+
2408
+
2409
+ class TestDispatchFixDbContention:
2410
+ """coord-portal#2538: a concurrent writer (the daemon's own passive
2411
+ tick, another `coord merge`/`coord notify` invocation) can hold the DB
2412
+ at the exact moment `record_dispatched_assignment` tries to record a
2413
+ dispatched fix. `coord.state`'s own bounded retry
2414
+ (`coord.db.retry_on_locked`) already rides out a short collision; this
2415
+ covers what happens once that retry budget is well and truly exhausted
2416
+ — `_dispatch_fix` must degrade to its documented "None on failure"
2417
+ contract instead of letting the raw `sqlite3.OperationalError` crash
2418
+ the caller (`coord merge`'s CI-fix queue, the review auto-loop, …)."""
2419
+
2420
+ def _work(self, machine: str = "laptop") -> Assignment:
2421
+ return Assignment(
2422
+ machine_name=machine,
2423
+ repo_name="api",
2424
+ issue_number=5,
2425
+ issue_title="Fix thing",
2426
+ briefing="Original briefing.",
2427
+ assignment_id="work-2538",
2428
+ status="done",
2429
+ branch="issue-5-fix-thing",
2430
+ dispatched_at=0.0,
2431
+ finished_at=1.0,
2432
+ type="work",
2433
+ )
2434
+
2435
+ def test_persistent_lock_contention_returns_none_without_crashing(
2436
+ self,
2437
+ ) -> None:
2438
+ cfg = _two_machine_config()
2439
+ work = self._work()
2440
+ board = Board(completed=[work])
2441
+ mock_http = MagicMock()
2442
+ mock_http.post.return_value.json.return_value = {"id": "fix-2538-a"}
2443
+ mock_http.post.return_value.raise_for_status = MagicMock()
2444
+
2445
+ with patch(
2446
+ "coord.auto_loop.record_dispatched_assignment",
2447
+ side_effect=sqlite3.OperationalError("database is locked"),
2448
+ ):
2449
+ result = _dispatch_fix(
2450
+ work, "Fix briefing.", board, cfg, iteration=1,
2451
+ http_client=mock_http,
2452
+ )
2453
+
2454
+ assert result is None
2455
+
2456
+ def test_persistent_lock_contention_rolls_back_the_board_append(
2457
+ self,
2458
+ ) -> None:
2459
+ """The fix assignment is appended to `board.active` before the DB
2460
+ write is attempted (so a fully successful dispatch needs no extra
2461
+ round trip) — a failed write must undo that append, or a later
2462
+ `save_board` call (triggered by some OTHER entry succeeding in the
2463
+ same `coord merge` tick) would persist a phantom row that was never
2464
+ actually recorded."""
2465
+ cfg = _two_machine_config()
2466
+ work = self._work()
2467
+ board = Board(completed=[work])
2468
+ mock_http = MagicMock()
2469
+ mock_http.post.return_value.json.return_value = {"id": "fix-2538-b"}
2470
+ mock_http.post.return_value.raise_for_status = MagicMock()
2471
+
2472
+ with patch(
2473
+ "coord.auto_loop.record_dispatched_assignment",
2474
+ side_effect=sqlite3.OperationalError("database is locked"),
2475
+ ):
2476
+ _dispatch_fix(
2477
+ work, "Fix briefing.", board, cfg, iteration=1,
2478
+ http_client=mock_http,
2479
+ )
2480
+
2481
+ assert board.active == []
2482
+
2483
+ def test_unrelated_operational_error_still_propagates(self) -> None:
2484
+ """A genuine bug (schema drift, a malformed statement) must not be
2485
+ swallowed as if it were routine transient contention — only the
2486
+ specific `database is locked` message is treated as declinable."""
2487
+ cfg = _two_machine_config()
2488
+ work = self._work()
2489
+ board = Board(completed=[work])
2490
+ mock_http = MagicMock()
2491
+ mock_http.post.return_value.json.return_value = {"id": "fix-2538-c"}
2492
+ mock_http.post.return_value.raise_for_status = MagicMock()
2493
+
2494
+ with patch(
2495
+ "coord.auto_loop.record_dispatched_assignment",
2496
+ side_effect=sqlite3.OperationalError("no such column: bogus"),
2497
+ ):
2498
+ with pytest.raises(sqlite3.OperationalError, match="no such column"):
2499
+ _dispatch_fix(
2500
+ work, "Fix briefing.", board, cfg, iteration=1,
2501
+ http_client=mock_http,
2502
+ )
2503
+
2504
+
2405
2505
  # ── #1176: test-author bounce gets a type="test-author" fix, not "work" ─────
2406
2506
 
2407
2507
 
@@ -333,3 +333,27 @@ class TestDispatchCiFixesWrapper:
333
333
  merge_cmd._dispatch_ci_fixes(events, two_machine_config, dry_run=False)
334
334
 
335
335
  assert entry.state == PENDING
336
+
337
+ def test_declined_dispatch_under_budget_is_echoed(
338
+ self, two_machine_config: Config, coord_db, capsys,
339
+ ) -> None:
340
+ """#2538: a declined dispatch (including `_dispatch_fix` hitting
341
+ persistent DB-lock contention, which surfaces exactly like any
342
+ other decline — see coord.auto_loop._dispatch_fix) must be visible
343
+ in `coord merge` output, not silently dropped — otherwise an
344
+ operator watching the run has no idea this entry didn't advance."""
345
+ from coord.commands import merge as merge_cmd
346
+ from coord.state import save_board
347
+
348
+ board = Board()
349
+ save_board(board)
350
+
351
+ entry = _entry()
352
+ events = [self._checks_failed_event(entry)]
353
+
354
+ with patch("coord.ci_fix.dispatch_ci_fix", return_value=None):
355
+ merge_cmd._dispatch_ci_fixes(events, two_machine_config, dry_run=False)
356
+
357
+ out = capsys.readouterr().out
358
+ assert "ci-fix not dispatched" in out
359
+ assert f"#{entry.issue_number}" in out
@@ -9,7 +9,13 @@ from pathlib import Path
9
9
  import pytest
10
10
 
11
11
  from coord import db as db_mod
12
- from coord.db import _ensure_schema, override_connection, close, _migrate_gate_order
12
+ from coord.db import (
13
+ _ensure_schema,
14
+ override_connection,
15
+ close,
16
+ _migrate_gate_order,
17
+ retry_on_locked,
18
+ )
13
19
 
14
20
 
15
21
  # ── Fixtures ──────────────────────────────────────────────────────────────────
@@ -724,6 +730,78 @@ class TestMergeQueueCiFixDispatchesColumn:
724
730
  conn.close()
725
731
 
726
732
 
733
+ # ── retry_on_locked (#2538) ─────────────────────────────────────────────────
734
+
735
+
736
+ class TestRetryOnLocked:
737
+ """#2538: `coord merge` crashed the whole run on a transient
738
+ `sqlite3.OperationalError: database is locked` raised while recording a
739
+ dispatched CI-fix assignment. `retry_on_locked` gives a momentary
740
+ collision (the daemon's own passive tick, another `coord merge`/`coord
741
+ notify` invocation holding the DB) a few short, backed-off attempts to
742
+ clear before it becomes the caller's problem.
743
+ """
744
+
745
+ def test_succeeds_immediately_when_no_contention(self) -> None:
746
+ calls = []
747
+
748
+ def _write() -> str:
749
+ calls.append(1)
750
+ return "ok"
751
+
752
+ assert retry_on_locked(_write) == "ok"
753
+ assert len(calls) == 1
754
+
755
+ def test_retries_through_transient_lock_then_succeeds(
756
+ self, monkeypatch: pytest.MonkeyPatch
757
+ ) -> None:
758
+ sleeps: list[float] = []
759
+ monkeypatch.setattr(db_mod.time, "sleep", lambda s: sleeps.append(s))
760
+
761
+ attempts = {"n": 0}
762
+
763
+ def _write() -> str:
764
+ attempts["n"] += 1
765
+ if attempts["n"] < 3:
766
+ raise sqlite3.OperationalError("database is locked")
767
+ return "ok"
768
+
769
+ result = retry_on_locked(_write)
770
+
771
+ assert result == "ok"
772
+ assert attempts["n"] == 3
773
+ # Two collisions before the third, successful attempt — backed off
774
+ # (each wait longer than the last), never a busy-loop.
775
+ assert len(sleeps) == 2
776
+ assert sleeps[1] > sleeps[0]
777
+
778
+ def test_raises_after_exhausting_the_retry_budget(
779
+ self, monkeypatch: pytest.MonkeyPatch
780
+ ) -> None:
781
+ monkeypatch.setattr(db_mod.time, "sleep", lambda s: None)
782
+
783
+ def _write() -> None:
784
+ raise sqlite3.OperationalError("database is locked")
785
+
786
+ with pytest.raises(sqlite3.OperationalError, match="database is locked"):
787
+ retry_on_locked(_write, attempts=3, base_delay=0.0)
788
+
789
+ def test_unrelated_operational_error_is_not_retried(self) -> None:
790
+ """A schema/statement bug is a real failure, not transient
791
+ contention — it must surface on the very first attempt rather than
792
+ being retried (and delayed) as if it were lock contention."""
793
+ calls = []
794
+
795
+ def _write() -> None:
796
+ calls.append(1)
797
+ raise sqlite3.OperationalError("no such table: bogus")
798
+
799
+ with pytest.raises(sqlite3.OperationalError, match="no such table"):
800
+ retry_on_locked(_write)
801
+
802
+ assert len(calls) == 1
803
+
804
+
727
805
  # ── override_connection ────────────────────────────────────────────────────────
728
806
 
729
807
  class TestOverrideConnection:
@@ -399,6 +399,92 @@ class TestDispatchedByAssignmentId:
399
399
  assert rows["sibling-load-001"]["dispatched_by_assignment_id"] == "origin-work-load"
400
400
 
401
401
 
402
+ class TestRecordDispatchedAssignmentLockContention:
403
+ """#2538: `_record_dispatched_assignment_local`'s INSERT is the one
404
+ write in that function that's actually load-bearing (unlike the
405
+ best-effort `_record_audit` call alongside it) — a concurrent writer
406
+ (the daemon's own passive tick, another `coord merge`/`coord notify`
407
+ invocation) holding the DB for a moment must not be fatal. It now
408
+ retries transient `database is locked` collisions via
409
+ `coord.db.retry_on_locked` before giving up.
410
+ """
411
+
412
+ class _FlakyConn:
413
+ """Wraps a real (in-memory) connection, raising `database is
414
+ locked` on the first *fail_times* `execute()` calls before
415
+ delegating to the real one — simulates a concurrent writer holding
416
+ the DB for a few moments."""
417
+
418
+ def __init__(self, real_conn, fail_times: int) -> None:
419
+ self._real = real_conn
420
+ self._fail_times = fail_times
421
+ self.calls = 0
422
+
423
+ def execute(self, *args, **kwargs):
424
+ self.calls += 1
425
+ if self.calls <= self._fail_times:
426
+ import sqlite3
427
+
428
+ raise sqlite3.OperationalError("database is locked")
429
+ return self._real.execute(*args, **kwargs)
430
+
431
+ def commit(self):
432
+ return self._real.commit()
433
+
434
+ def test_retries_through_transient_lock_then_persists(
435
+ self, coord_db, monkeypatch
436
+ ) -> None:
437
+ from coord.models import Assignment
438
+ from coord.state import record_dispatched_assignment
439
+
440
+ monkeypatch.setattr("coord.db.time.sleep", lambda s: None)
441
+ flaky = self._FlakyConn(coord_db, fail_times=2)
442
+ monkeypatch.setattr("coord.state.get_connection", lambda: flaky)
443
+
444
+ record_dispatched_assignment(
445
+ assignment=Assignment(
446
+ assignment_id="ci-fix-2538", machine_name="laptop",
447
+ repo_name="api", issue_number=9, issue_title="[fix-1] thing",
448
+ type="work",
449
+ ),
450
+ repo_github="acme/api",
451
+ )
452
+
453
+ assert flaky.calls == 3 # two collisions, then the write that lands
454
+ row = coord_db.execute(
455
+ "SELECT status FROM assignments WHERE assignment_id=?",
456
+ ("ci-fix-2538",),
457
+ ).fetchone()
458
+ assert row is not None, "assignment must be durably recorded once the lock clears"
459
+ assert row["status"] == "running"
460
+
461
+ def test_raises_once_the_retry_budget_is_exhausted(
462
+ self, coord_db, monkeypatch
463
+ ) -> None:
464
+ """A lock that never clears within the bounded retry budget must
465
+ still surface to the caller — `coord.auto_loop._dispatch_fix` is
466
+ the layer responsible for turning that into a graceful "declined"
467
+ rather than a crash, not this one silently swallowing it."""
468
+ import sqlite3
469
+
470
+ from coord.models import Assignment
471
+ from coord.state import record_dispatched_assignment
472
+
473
+ monkeypatch.setattr("coord.db.time.sleep", lambda s: None)
474
+ flaky = self._FlakyConn(coord_db, fail_times=999)
475
+ monkeypatch.setattr("coord.state.get_connection", lambda: flaky)
476
+
477
+ with pytest.raises(sqlite3.OperationalError, match="database is locked"):
478
+ record_dispatched_assignment(
479
+ assignment=Assignment(
480
+ assignment_id="ci-fix-2538-b", machine_name="laptop",
481
+ repo_name="api", issue_number=9, issue_title="[fix-1] thing",
482
+ type="work",
483
+ ),
484
+ repo_github="acme/api",
485
+ )
486
+
487
+
402
488
  class TestRecordDispatchedAssignmentBranch:
403
489
  """#557: record_dispatched_assignment must persist the branch column so
404
490
  coord reattach can find it for the remote push-back finalize."""