code-coordinator 0.5.491__tar.gz → 0.5.493__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (897) hide show
  1. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/test_gate.py +39 -0
  5. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/db.py +123 -0
  6. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/merge_queue.py +165 -68
  7. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/state.py +456 -29
  8. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test.py +54 -0
  9. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_db.py +118 -0
  10. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gates.py +24 -0
  11. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_merge_queue.py +126 -0
  12. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_state.py +595 -0
  13. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/.gitignore +0 -0
  26. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/GOAL.md +0 -0
  28. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/LICENSE +0 -0
  29. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/README.md +0 -0
  31. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/backup.py +0 -0
  51. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/board_schema.py +0 -0
  53. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/client.py +0 -0
  67. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/codegen.py +0 -0
  76. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/dr.py +0 -0
  79. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/commands/tui.py +0 -0
  103. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/comments.py +0 -0
  104. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/config.py +0 -0
  105. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dead_end.py +0 -0
  115. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/decomposition_chat.py +0 -0
  116. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/README.md +0 -0
  117. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-agent.service +0 -0
  118. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-backup.service +0 -0
  119. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-backup.timer +0 -0
  120. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.service +0 -0
  121. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.sh +0 -0
  122. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-db-backup.timer +0 -0
  123. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-dr-verify.service +0 -0
  124. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-dr-verify.timer +0 -0
  125. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-drive-queue.service +0 -0
  126. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-drive-queue.timer +0 -0
  127. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-failure-notify.service +0 -0
  128. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-fleet-watchdog.service +0 -0
  129. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  130. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-notify.service +0 -0
  131. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-notify.timer +0 -0
  132. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-propagate.service +0 -0
  133. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-propagate.timer +0 -0
  134. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-window.service +0 -0
  135. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-release-window.timer +0 -0
  136. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-serve.service +0 -0
  137. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-web-dist-build.service +0 -0
  138. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-web-dist-build.timer +0 -0
  139. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy/coord-web.service +0 -0
  140. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy_manifest.py +0 -0
  141. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deploy_units.py +0 -0
  142. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deprecation_telemetry.py +0 -0
  143. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/deps.py +0 -0
  144. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/diagnose.py +0 -0
  145. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/drive_state.py +0 -0
  153. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/events.py +0 -0
  154. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/failure_class.py +0 -0
  155. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/failure_classifier.py +0 -0
  156. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/filelock.py +0 -0
  157. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/fleet_config_health.py +0 -0
  158. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/forge_availability.py +0 -0
  159. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/freshness.py +0 -0
  160. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gate_a.py +0 -0
  161. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gate_b.py +0 -0
  162. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gate_snapshot.py +0 -0
  163. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gates.py +0 -0
  164. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/gen_board_fixture.py +0 -0
  165. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/github_ops.py +0 -0
  166. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/github_throttle.py +0 -0
  167. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/goal.py +0 -0
  168. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/graph_health.py +0 -0
  169. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/__init__.py +0 -0
  170. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/aggregate.py +0 -0
  171. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/__init__.py +0 -0
  172. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/_ci_pin.py +0 -0
  173. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/agent_install.py +0 -0
  174. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/cargo_targets.py +0 -0
  175. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/claude_binary.py +0 -0
  176. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/config_drift.py +0 -0
  177. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  178. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/coord_web_ci_pin.py +0 -0
  179. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/deploy_lane_facts.py +0 -0
  180. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/disk.py +0 -0
  181. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_board.py +0 -0
  182. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  183. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_phantom.py +0 -0
  184. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/fleet_unit_drift.py +0 -0
  185. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/graph.py +0 -0
  186. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/graphify_cli.py +0 -0
  187. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/index_lock.py +0 -0
  188. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/issues_sync_staleness.py +0 -0
  189. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/plan_usage.py +0 -0
  190. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/pr_churn.py +0 -0
  191. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/release_cordon.py +0 -0
  192. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/repo_state.py +0 -0
  193. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/spawned_coord.py +0 -0
  194. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/stalled_pipeline.py +0 -0
  195. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/timer_active.py +0 -0
  196. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/toolchain.py +0 -0
  197. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/unit_drift.py +0 -0
  198. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/unit_enablement.py +0 -0
  199. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/wedged_drive_queue.py +0 -0
  200. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/checks/worktrees.py +0 -0
  201. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/cli.py +0 -0
  202. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/context.py +0 -0
  203. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/fleet_snapshot.py +0 -0
  204. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/models.py +0 -0
  205. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/pypi.py +0 -0
  206. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/registry.py +0 -0
  207. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/render.py +0 -0
  208. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/health/units.py +0 -0
  209. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/hooks.py +0 -0
  210. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/housekeeping.py +0 -0
  211. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/interactive.py +0 -0
  212. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/invariant_alarms.py +0 -0
  213. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/issue_store.py +0 -0
  214. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/issues_sync_status.py +0 -0
  215. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/liveness_auditor.py +0 -0
  216. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_fault.py +0 -0
  217. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_metrics.py +0 -0
  218. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_onboard.py +0 -0
  219. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_pause.py +0 -0
  220. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/machine_stats.py +0 -0
  221. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_chat.py +0 -0
  222. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_dispatch.py +0 -0
  223. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_gate.py +0 -0
  224. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/milestone_order.py +0 -0
  225. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/mock_author.py +0 -0
  226. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/models.py +0 -0
  227. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/network.py +0 -0
  228. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/new_issue_chat.py +0 -0
  229. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/__init__.py +0 -0
  230. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/baseline.py +0 -0
  231. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/cli.py +0 -0
  232. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/collect.py +0 -0
  233. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/digest.py +0 -0
  234. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/models.py +0 -0
  235. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/predicate.py +0 -0
  236. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/service.py +0 -0
  237. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/store.py +0 -0
  238. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notifier/transport.py +0 -0
  239. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/notify.py +0 -0
  240. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/openapi.py +0 -0
  241. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/overlap_fence.py +0 -0
  242. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/overlap_predict.py +0 -0
  243. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/parentage.py +0 -0
  244. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/parentage_github.py +0 -0
  245. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/pipeline.py +0 -0
  246. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/plan_parser.py +0 -0
  247. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/plans.py +0 -0
  248. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/platform_paths.py +0 -0
  249. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/portal_bridge.py +0 -0
  250. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/portal_store.py +0 -0
  251. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/portal_sync.py +0 -0
  252. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/pr_body_lint.py +0 -0
  253. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/prereqs.py +0 -0
  254. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/progress.py +0 -0
  255. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/__init__.py +0 -0
  256. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/base.py +0 -0
  257. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/claude.py +0 -0
  258. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/claude_pty.py +0 -0
  259. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/providers/opencode.py +0 -0
  260. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/queue_diagnose.py +0 -0
  261. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/reconcile.py +0 -0
  262. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/reconcile_tick.py +0 -0
  263. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/refine_chat.py +0 -0
  264. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_cordon.py +0 -0
  265. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_propagate.py +0 -0
  266. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_verify.py +0 -0
  267. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/release_window.py +0 -0
  268. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/repo_dormancy.py +0 -0
  269. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/repo_edit.py +0 -0
  270. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/repo_onboard.py +0 -0
  271. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/reports.py +0 -0
  272. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/rest_schema.py +0 -0
  273. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/revalidate.py +0 -0
  274. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/review.py +0 -0
  275. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/scorecard.py +0 -0
  276. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/self_health.py +0 -0
  277. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/serve_app.py +0 -0
  278. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  279. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  280. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  281. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/portal-followup/SKILL.md +0 -0
  284. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/release-now/SKILL.md +0 -0
  285. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  286. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  287. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/skills/update-issue/SKILL.md +0 -0
  288. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/smoke.py +0 -0
  289. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/spend_ceiling.py +0 -0
  290. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/split_work.py +0 -0
  291. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/sql.py +0 -0
  292. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/stage_projection.py +0 -0
  293. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/store_migrate.py +0 -0
  294. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/store_parity.py +0 -0
  295. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/templates/deploy-cloudflare.node.yml +0 -0
  296. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_author.py +0 -0
  297. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_chat.py +0 -0
  298. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_orchestrator.py +0 -0
  299. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/test_report.py +0 -0
  300. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/tui_release.py +0 -0
  301. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/uat_checks.py +0 -0
  302. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/usage.py +0 -0
  303. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/usage_limits.py +0 -0
  304. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/usage_rollup.py +0 -0
  305. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coord/worker_events.py +0 -0
  306. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/coordinator.example.yml +0 -0
  307. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-agent.service +0 -0
  308. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-backup.service +0 -0
  309. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-backup.timer +0 -0
  310. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-db-backup.service +0 -0
  311. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-db-backup.sh +0 -0
  312. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-db-backup.timer +0 -0
  313. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-dr-verify.service +0 -0
  314. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-dr-verify.timer +0 -0
  315. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-drive-queue.service +0 -0
  316. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-drive-queue.timer +0 -0
  317. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-failure-notify.service +0 -0
  318. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-failure-notify.sh +0 -0
  319. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-fleet-watchdog.service +0 -0
  320. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-fleet-watchdog.timer +0 -0
  321. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-notify.service +0 -0
  322. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-notify.timer +0 -0
  323. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-propagate.service +0 -0
  324. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-propagate.timer +0 -0
  325. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-window.service +0 -0
  326. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-release-window.timer +0 -0
  327. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-serve.service +0 -0
  328. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.service +0 -0
  329. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.sh +0 -0
  330. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-dist-build.timer +0 -0
  331. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web-rollback.sh +0 -0
  332. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/coord-web.service +0 -0
  333. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/deploy/node-shim.sh +0 -0
  334. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_TUI_CI.md +0 -0
  335. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  336. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_CI.md +0 -0
  337. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_COORD_WEB_DIST.md +0 -0
  338. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  339. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/AGENT_OPERATIONS.md +0 -0
  340. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ARCHITECTURE.md +0 -0
  341. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ARCH_SECURITY_GATES.md +0 -0
  342. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/COCKPIT.md +0 -0
  343. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CONTROL_CENTER.md +0 -0
  344. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/COST_DISCIPLINE.md +0 -0
  345. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CROSS_PLATFORM.md +0 -0
  346. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CUSTOMER_FACING_APPS.md +0 -0
  347. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/CUSTOMER_PORTAL.md +0 -0
  348. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/DATA_STORE_SELECTION.md +0 -0
  349. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/DISASTER_RECOVERY.md +0 -0
  350. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/DRIVE_QUEUE.md +0 -0
  351. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/EPHEMERAL_WORKERS.md +0 -0
  352. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/FORGE_MIGRATION.md +0 -0
  353. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/GRAPHIFY_SETUP.md +0 -0
  354. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ISSUE_GUIDANCE.md +0 -0
  355. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/MAC_MINI.md +0 -0
  356. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  357. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/NOTIFIER.md +0 -0
  358. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/OPENCODE_VERIFICATION.md +0 -0
  359. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/OPERATING_GOTCHAS.md +0 -0
  360. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/OPERATOR_GUIDES.md +0 -0
  361. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/ORACLE_LOOP.md +0 -0
  362. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/PHONE_WEBAPP.md +0 -0
  363. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/PIPELINE_V2.md +0 -0
  364. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/PLATFORM_EVOLUTION.md +0 -0
  365. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/SECOND_BACKEND.md +0 -0
  366. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/STORE_SERVICE.md +0 -0
  367. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  368. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/WEB_CONTROL_CENTER.md +0 -0
  369. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/WSL_WINDOWS_WORKER.md +0 -0
  370. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/README.md +0 -0
  371. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/_tokens.css +0 -0
  372. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/issue-detail.html +0 -0
  373. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/pipeline-narrow.html +0 -0
  374. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/docs/mocks/web/pipeline-wide.html +0 -0
  375. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/graphify-out/.gitignore +0 -0
  376. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/install-agent.sh +0 -0
  377. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/pyproject.toml +0 -0
  378. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/audit_review_verdict_overrides.py +0 -0
  379. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  380. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/build-worker-image.sh +0 -0
  381. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/coordinator-machine.py +0 -0
  382. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/dr-down.sh +0 -0
  383. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/dr-up.sh +0 -0
  384. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/epic-down.sh +0 -0
  385. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/epic-up.sh +0 -0
  386. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/preflight.sh +0 -0
  387. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/provision-server.sh +0 -0
  388. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/provision-worker.sh +0 -0
  389. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  390. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  391. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/throwaway-vm.sh +0 -0
  392. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/azure-workers/verify-github-token.sh +0 -0
  393. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/check_gh_argv_containment.py +0 -0
  394. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/codegen.py +0 -0
  395. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-test-runner.sh +0 -0
  396. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  397. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  398. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  399. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  400. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/coord-venv-rollback.sh +0 -0
  401. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/extract-coord-tui.sh +0 -0
  403. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/fleet_watchdog.py +0 -0
  404. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/gen_board_fixture.py +0 -0
  405. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/gen_mock_index.py +0 -0
  406. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/lib/provision-core.sh +0 -0
  407. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/next_release_tag.py +0 -0
  408. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/provision-machine.sh +0 -0
  409. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/run_tests_in_populated_home.sh +0 -0
  410. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/run_tests_without_gh.sh +0 -0
  411. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/setup-macmini.sh +0 -0
  412. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/smoke_437_interactive.py +0 -0
  413. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify-provision-noble.sh +0 -0
  414. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify_878_review_capture.py +0 -0
  415. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify_release_published.py +0 -0
  416. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/scripts/verify_release_wheel.py +0 -0
  417. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/setup.cfg +0 -0
  418. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/SMOKE_SET.md +0 -0
  419. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/__init__.py +0 -0
  420. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/contract.md +0 -0
  426. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  427. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  428. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/manifest.yml +0 -0
  429. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  430. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-51/tsconfig.json +0 -0
  431. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  432. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/backends.py +0 -0
  433. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/conftest.py +0 -0
  434. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/board-pipeline-basic.json +0 -0
  435. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  436. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  437. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  438. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  439. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/all_pass.json +0 -0
  440. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  441. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/mixed_fail.json +0 -0
  442. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  443. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  444. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/skip.json +0 -0
  445. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/playwright/truncated.json +0 -0
  446. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  447. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  448. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  449. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  450. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  451. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  452. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  453. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_acceptance.py +0 -0
  455. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_acceptance_drivers.py +0 -0
  456. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent.py +0 -0
  457. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_api_error.py +0 -0
  458. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_app.py +0 -0
  459. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_branch_base.py +0 -0
  460. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_branch_capture.py +0 -0
  461. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_config_free_1712.py +0 -0
  462. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_deploy_units_endpoint.py +0 -0
  463. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_dirty_worktree.py +0 -0
  464. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  465. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_graph_self_heal.py +0 -0
  466. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_health_h3.py +0 -0
  467. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_idle_restart.py +0 -0
  468. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_push_failure.py +0 -0
  469. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_reap.py +0 -0
  470. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_repos_and_pull.py +0 -0
  471. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_restart_services_endpoint.py +0 -0
  472. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_skills_self_heal.py +0 -0
  473. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_startup_diagnostics.py +0 -0
  474. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_update.py +0 -0
  475. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_update_bluegreen.py +0 -0
  476. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_usage_limit.py +0 -0
  477. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_agent_zero_commit.py +0 -0
  478. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ambient_home_isolation.py +0 -0
  479. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_capability_reroute_3241.py +0 -0
  480. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_dependency_busy_2804.py +0 -0
  481. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_reject_plan.py +0 -0
  482. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approve_usage_gate.py +0 -0
  483. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approved_work_2532.py +0 -0
  484. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_approved_work_2996.py +0 -0
  485. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_assignment_already_recorded_daemon.py +0 -0
  486. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_audit_log.py +0 -0
  487. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_audit_outcome.py +0 -0
  488. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_audit_query.py +0 -0
  489. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_auto_loop.py +0 -0
  490. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_auto_release_publish_2035.py +0 -0
  491. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_backend_selection.py +0 -0
  492. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_backup.py +0 -0
  493. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_base_checkout_restore.py +0 -0
  494. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_block_log.py +0 -0
  495. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_read_path.py +0 -0
  498. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_schema.py +0 -0
  499. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_service.py +0 -0
  500. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_state.py +0 -0
  501. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_board_wire.py +0 -0
  502. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_brain.py +0 -0
  503. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_branch_model.py +0 -0
  504. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_bug_intake.py +0 -0
  505. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_build_worker_image_env_update.py +0 -0
  506. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cargo_cache.py +0 -0
  507. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_check_gh_argv_containment.py +0 -0
  508. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_acceptance_gate_1950.py +0 -0
  509. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_fix.py +0 -0
  510. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_github.py +0 -0
  511. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_gitlab.py +0 -0
  512. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_parity_2091.py +0 -0
  513. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_ci_store.py +0 -0
  514. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_claim.py +0 -0
  515. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_claude_md_budget.py +0 -0
  516. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_claude_setup_token.py +0 -0
  517. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_acceptance.py +0 -0
  518. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign.py +0 -0
  519. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  520. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_interactive_remote.py +0 -0
  521. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_provider.py +0 -0
  522. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  523. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_audit.py +0 -0
  524. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_chat_continue.py +0 -0
  525. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_codegen.py +0 -0
  526. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_decide.py +0 -0
  527. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_capability_rules.py +0 -0
  528. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_config_provenance.py +0 -0
  529. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_forge_availability.py +0 -0
  530. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_graph.py +0 -0
  531. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_self.py +0 -0
  532. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_diagnose_test_coverage.py +0 -0
  533. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor.py +0 -0
  534. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor_config_free_1801.py +0 -0
  535. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  536. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  537. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_drive.py +0 -0
  538. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_drive_queue.py +0 -0
  539. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_escalate.py +0 -0
  540. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_fix_headless_review.py +0 -0
  541. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_gate_a.py +0 -0
  542. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_install_drift.py +0 -0
  543. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_install_skills.py +0 -0
  544. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_comment.py +0 -0
  545. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_create_label.py +0 -0
  546. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_reopen.py +0 -0
  547. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_issue_view_list.py +0 -0
  548. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_merge.py +0 -0
  549. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_assign.py +0 -0
  550. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_capture.py +0 -0
  551. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_chat_add_child.py +0 -0
  552. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_dispatch.py +0 -0
  553. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_gate_b.py +0 -0
  554. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_gate_c.py +0 -0
  555. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_order.py +0 -0
  556. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  557. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_milestone_ship.py +0 -0
  558. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_network.py +0 -0
  559. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_new_issue_chat.py +0 -0
  560. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_plans.py +0 -0
  561. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_portal.py +0 -0
  562. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_pr.py +0 -0
  563. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_pull_artifact.py +0 -0
  564. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_queue.py +0 -0
  565. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_reattach_sessions.py +0 -0
  566. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_refine_board.py +0 -0
  567. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_release_preflight.py +0 -0
  568. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_release_propagate.py +0 -0
  569. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_release_window.py +0 -0
  570. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_repo_2220.py +0 -0
  571. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  572. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_scorecard.py +0 -0
  573. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_serve_store_backend_3084.py +0 -0
  574. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_set_review_findings.py +0 -0
  575. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_advisory_terminal.py +0 -0
  576. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_contested_tag.py +0 -0
  577. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_invariant_alarms.py +0 -0
  578. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_machine_fault.py +0 -0
  579. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_merge_queue.py +0 -0
  580. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_provider.py +0 -0
  581. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_retried_3340.py +0 -0
  582. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_review_finalizing.py +0 -0
  583. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_test_failed_tag.py +0 -0
  584. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_status_usage_limit.py +0 -0
  585. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_sync_comments_873.py +0 -0
  586. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_test_plan.py +0 -0
  587. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_track.py +0 -0
  588. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_tui_update.py +0 -0
  589. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cli_wait.py +0 -0
  590. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client.py +0 -0
  591. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client_base_install.py +0 -0
  592. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client_config_cache_atomic_3052.py +0 -0
  593. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_client_resource_migration_1946.py +0 -0
  594. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_commands_common.py +0 -0
  595. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_comments.py +0 -0
  596. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_completion_summary.py +0 -0
  597. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config.py +0 -0
  598. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_acceptance.py +0 -0
  599. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_audit.py +0 -0
  600. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_drift_check.py +0 -0
  601. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_pricing.py +0 -0
  602. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  603. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_config_usage_gate.py +0 -0
  604. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_confirm_test.py +0 -0
  605. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_conflict_fix.py +0 -0
  606. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_conflict_fix_semantic.py +0 -0
  607. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  608. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  609. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_baseline.py +0 -0
  610. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_populated_home.py +0 -0
  611. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_routing.py +0 -0
  612. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_test_runner_toolchain.py +0 -0
  613. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_uat.py +0 -0
  614. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coord_web_sse_restart_live.py +0 -0
  615. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_coordinator_machine.py +0 -0
  616. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_cross_platform_imports.py +0 -0
  617. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dao.py +0 -0
  618. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard.py +0 -0
  619. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_api.py +0 -0
  620. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_fixture.py +0 -0
  621. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_server.py +0 -0
  622. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_terminal.py +0 -0
  623. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dashboard_terminal_live.py +0 -0
  624. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dead_end.py +0 -0
  625. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_decomposition_chat.py +0 -0
  626. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_coord_db_backup.py +0 -0
  627. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_coord_web_dist.py +0 -0
  628. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_coord_web_rollback.py +0 -0
  629. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_db_backup_unit.py +0 -0
  630. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_drive_queue_unit.py +0 -0
  631. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_failure_notify_unit.py +0 -0
  632. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_manifest.py +0 -0
  633. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_notify_unit.py +0 -0
  634. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_units_lane.py +0 -0
  635. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deploy_web_unit.py +0 -0
  636. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deprecation_telemetry.py +0 -0
  637. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_deps.py +0 -0
  638. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_diagnose.py +0 -0
  639. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch.py +0 -0
  640. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch_liveness.py +0 -0
  641. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch_target_validation.py +0 -0
  642. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dispatch_workers.py +0 -0
  643. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dist_name.py +0 -0
  644. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_done_housekeeping.py +0 -0
  645. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dr_azure_scripts.py +0 -0
  646. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dr_promote.py +0 -0
  647. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_dr_verify.py +0 -0
  648. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive.py +0 -0
  649. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_machine_fault.py +0 -0
  650. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue.py +0 -0
  651. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_blocked_rendering.py +0 -0
  652. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_launch_argv.py +0 -0
  653. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  654. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_roll_pending.py +0 -0
  655. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  656. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_state.py +0 -0
  657. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_drive_tmux.py +0 -0
  658. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_epic_up_capability_detection.py +0 -0
  659. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  660. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_epic_up_image_provenance.py +0 -0
  661. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_errors.py +0 -0
  662. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_events.py +0 -0
  663. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_failure_class.py +0 -0
  664. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_failure_classifier.py +0 -0
  665. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_filelock.py +0 -0
  666. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  667. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fix_escalation_classifier.py +0 -0
  668. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fix_of_force_override.py +0 -0
  669. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_config_health.py +0 -0
  670. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_health_probes.py +0 -0
  671. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_health_snapshot.py +0 -0
  672. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_fleet_watchdog.py +0 -0
  673. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_forge_availability.py +0 -0
  674. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_freshness.py +0 -0
  675. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gate_a.py +0 -0
  676. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gate_b.py +0 -0
  677. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gate_snapshot_staleness.py +0 -0
  678. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  679. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_gen_mock_index.py +0 -0
  680. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_generated_rust_fixture.py +0 -0
  681. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_generated_rust_requests.py +0 -0
  682. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_generated_types_fixture.py +0 -0
  683. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_github_ops.py +0 -0
  684. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_github_throttle.py +0 -0
  685. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_goal.py +0 -0
  686. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_graph_health.py +0 -0
  687. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_graph_selfheal_absent_2237.py +0 -0
  688. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_handoff.py +0 -0
  689. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_checks.py +0 -0
  690. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_cli.py +0 -0
  691. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_cli_graph.py +0 -0
  692. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_config.py +0 -0
  693. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_context.py +0 -0
  694. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_coord_tui_ci_pin.py +0 -0
  695. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_coord_web_ci_pin.py +0 -0
  696. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_deploy_lane_facts.py +0 -0
  697. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_fix.py +0 -0
  698. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_incident_regression.py +0 -0
  699. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_issues_sync_staleness.py +0 -0
  700. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_pr_churn.py +0 -0
  701. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_pypi.py +0 -0
  702. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_registry.py +0 -0
  703. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_release_cordon_probe.py +0 -0
  704. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_timer_active.py +0 -0
  705. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_toolchain.py +0 -0
  706. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_unit_drift.py +0 -0
  707. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_unit_enablement.py +0 -0
  708. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_health_wedged_drive_queue.py +0 -0
  709. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_hooks.py +0 -0
  710. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_housekeeping.py +0 -0
  711. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_human_attended_437.py +0 -0
  712. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_init.py +0 -0
  713. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_install_agent_venv_2911.py +0 -0
  714. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_integration.py +0 -0
  715. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_briefing_echo.py +0 -0
  716. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_pane_log_2541.py +0 -0
  717. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_prefill_state.py +0 -0
  718. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_session_relaunch.py +0 -0
  719. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_test_verdict_backstop.py +0 -0
  720. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_token_attribution.py +0 -0
  721. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_interactive_worktree.py +0 -0
  722. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_invariant_alarms.py +0 -0
  723. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_issue_store_seam.py +0 -0
  724. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_issues_sync_status.py +0 -0
  725. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_liveness_auditor.py +0 -0
  726. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_liveness_notify.py +0 -0
  727. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_lock_contention_ratchet.py +0 -0
  728. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_fault.py +0 -0
  729. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_metrics.py +0 -0
  730. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_onboard.py +0 -0
  731. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_pause.py +0 -0
  732. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_machine_stats.py +0 -0
  733. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.491 → code_coordinator-0.5.493}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.491
3
+ Version: 0.5.493
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.491
3
+ Version: 0.5.493
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.491",
2
+ "tag": "0.5.493",
3
3
  "distance": 0,
4
- "node": "g0bf722668fffd8f60d76696692afdbf7f1b292ff",
4
+ "node": "g21581c4b4d4c5107d3a7da2aefbfdfbd93aeee1e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-18"
@@ -565,6 +565,45 @@ def test(assignment_id: str, config_path: Path, verdict: str | None, reason: str
565
565
  elif verdict == "running":
566
566
  click.echo(" (transient — record --passed/--fail/--skipped when the run concludes)")
567
567
 
568
+ # #3386 (item 3 of #3378): tell the human RIGHT HERE how close (or
569
+ # past) this repo is to the consecutive baseline-red merge-block
570
+ # limit — `record_test_verdict` above just incremented it if this
571
+ # was a `baseline_red`-confirmed skip
572
+ # (`coord.confirm_test.test_confirmation_for_skip_reason`). Silence
573
+ # here is exactly how #3378's bypass ran unnoticed for 33 days: the
574
+ # command that records the bypass is the one place a human is
575
+ # already looking.
576
+ if test_confirmation == "baseline_red":
577
+ from coord.state import (
578
+ BASELINE_RED_STREAK_LIMIT,
579
+ baseline_red_merge_blocked,
580
+ baseline_red_streak,
581
+ )
582
+
583
+ # #3386 review: `baseline_red_merge_blocked` is the ONE predicate
584
+ # both the real merge refusal (`coord.merge_queue.
585
+ # evaluate_smoke_verdict`) and any repo-level alert surface must
586
+ # call — never a second, independently-derived comparison
587
+ # against `BASELINE_RED_STREAK_LIMIT` (#2096). This echo used to
588
+ # re-derive `streak >= BASELINE_RED_STREAK_LIMIT` itself; now it
589
+ # asks the same function the merge gate asks, so the two can
590
+ # never silently disagree.
591
+ streak = baseline_red_streak(assignment.repo_name)
592
+ if baseline_red_merge_blocked(assignment.repo_name):
593
+ click.echo(
594
+ f" WARNING: {assignment.repo_name} has now recorded {streak} "
595
+ f"consecutive baseline-red (#2170) classifications — "
596
+ f"`coord merge` will refuse EVERY branch on this repo until "
597
+ f"the merge base itself is fixed (#3386)."
598
+ )
599
+ else:
600
+ click.echo(
601
+ f" note: {assignment.repo_name}'s consecutive baseline-red "
602
+ f"streak is now {streak}/{BASELINE_RED_STREAK_LIMIT} — "
603
+ f"merges for this repo stop at {BASELINE_RED_STREAK_LIMIT} "
604
+ f"in a row with no genuine pass in between (#3386)."
605
+ )
606
+
568
607
  # #271 part 1: restore the local checkout to `default_branch` after a
569
608
  # pass/skip verdict (legacy safety — #561 means a Build no longer moves
570
609
  # the base, so this is a no-op on fresh checkouts), and #561: remove the
@@ -666,6 +666,129 @@ def rollback_after_driver_error(conn: Any | None, exc: BaseException) -> None:
666
666
  pass
667
667
 
668
668
 
669
+ def undo_pending_write(conn: Any | None, exc: BaseException, *, undo: Callable[[], Any]) -> None:
670
+ """Run *undo* — a compensating statement touching only THIS write's own
671
+ row — after *exc*, the #3382 sibling of
672
+ :func:`rollback_after_driver_error` for a writer whose own
673
+ ``conn.commit()`` call, not just the statement before it, can raise.
674
+
675
+ :func:`rollback_after_driver_error` deliberately no-ops for a plain
676
+ SQLite error (see its docstring): that is correct when the failure is a
677
+ STATEMENT that never got to write anything — SQLite's ``SQLITE_BUSY``,
678
+ hit while acquiring the lock a write needs, leaves nothing applied, so
679
+ simply re-running the whole write closure from scratch (what
680
+ :func:`retry_on_locked` does) is exactly as good as a rollback.
681
+
682
+ That reasoning does not hold when it is ``conn.commit()`` itself that
683
+ raises. WAL-checkpoint contention can make ``COMMIT`` hit
684
+ ``SQLITE_BUSY`` *after* the statement(s) before it already applied
685
+ inside the still-open transaction — the write is neither committed nor
686
+ undone, so it sits there, genuinely pending, on ``coord.db``'s shared
687
+ process-wide connection, ready for a completely unrelated handler's next
688
+ unrelated ``commit()`` to durably persist it later. #3382: this is
689
+ exactly how a ``review_claims`` row survived two callers who each saw
690
+ their own ``/review-claim`` POST fail with a 503 — neither call's own
691
+ retry-free write had anything guarding its ``commit()``, so the pending
692
+ insert outlived both failed calls and was swept up by a later,
693
+ completely unrelated write on the same shared connection.
694
+
695
+ A bare retry of the closure does not fix this the way it fixes a failed
696
+ statement, either: an ``INSERT OR IGNORE`` re-run against its own
697
+ still-pending prior insert reads back as a conflict (``rowcount == 0``),
698
+ so the retry silently misreports "someone else already holds this
699
+ claim" about a claim only this process's own earlier, abandoned attempt
700
+ took.
701
+
702
+ **Why a compensating statement, and not a transaction-level undo of any
703
+ kind (#3382 review rounds 1 and 2).** Two earlier shapes of this
704
+ function were both rejected, for the same underlying reason:
705
+
706
+ * ``conn.rollback()`` (round 1). On ``coord.db``'s shared, process-wide
707
+ SQLite singleton (see this module's own docstring), that discards
708
+ *every* other thread's not-yet-committed statement too — this process
709
+ dispatches other ``_*_local`` writers through ``run_in_threadpool`` on
710
+ real OS worker threads (the daemon's periodic tick, the ``/board``
711
+ build, ``/assignment/*`` handlers), and Python's ``sqlite3`` joins ANY
712
+ thread's statement issued on this one connection between commits into
713
+ the SAME open transaction. An unrelated writer that already got
714
+ ``sql.execute``/``sql.insert_ignore``'s success back (nothing in this
715
+ tree commits internally — see ``coord/sql.py``) then silently loses it
716
+ when its own later ``conn.commit()`` no-ops or raises ``cannot commit
717
+ - no transaction is active`` — this issue's own second logged symptom.
718
+
719
+ * ``SAVEPOINT`` + ``ROLLBACK TO SAVEPOINT`` (round 2), whether the
720
+ savepoint name is a shared literal or made unique per call. Unique
721
+ names fix only the narrower half of the problem (two concurrent calls
722
+ resolving each other's marker, since SQLite binds a name to the most
723
+ recently established savepoint of that name). They do **not** fix the
724
+ half that matters: ``ROLLBACK TO SAVEPOINT`` reverts the database to
725
+ its state *just after that savepoint was established*, so it undoes
726
+ every statement issued since — including another thread's, which this
727
+ writer has no business undoing — and destroys that thread's own
728
+ savepoints along the way. Verified against a real ``sqlite3``
729
+ connection (Python 3.12, SQLite 3.45): with two distinctly-named
730
+ savepoints opened back to back and one row inserted after each,
731
+ ``ROLLBACK TO`` the OUTER (uniquely-named) savepoint removes BOTH
732
+ rows. A transaction-scoped undo simply cannot express "mine only" on a
733
+ connection several threads write through.
734
+
735
+ So the undo is row-scoped instead: *undo* issues one statement that
736
+ names this write's own row and nothing else (delete the row this call
737
+ inserted, identified by its own ``claimed_at`` stamp; re-insert the row
738
+ this call deleted, with the ``claimed_at`` it read back first). It is
739
+ exact regardless of how other threads' statements interleave with this
740
+ one — before the failure or after it — because it never refers to their
741
+ rows.
742
+
743
+ It also degrades better than a transaction-level undo when an unrelated
744
+ thread's ``commit()`` lands *between* this write's statement and this
745
+ recovery: a savepoint would already have been destroyed by that commit
746
+ (``COMMIT`` releases all savepoints), leaving ``ROLLBACK TO`` to fail
747
+ and this write's row durably committed and leaked — precisely the
748
+ incident. The compensating statement instead stays pending and is
749
+ flushed by whichever ``commit()`` reaches it next (this closure's own
750
+ retry, or another writer's), so the net effect on this row is still
751
+ nothing.
752
+
753
+ Call this from the ``except sql.driver_errors():`` block of a write
754
+ closure that both executes a statement *and* calls ``conn.commit()``
755
+ itself, and **only when that closure's own statement actually applied**
756
+ (``cursor.rowcount``) — a statement that failed applied nothing, so
757
+ there is nothing to compensate, the same "a failed STATEMENT applies
758
+ nothing" reasoning :func:`rollback_after_driver_error` already
759
+ documents. Today's callers are the ``review_claims``/``smoke_claims``
760
+ claim and release writes in ``coord/state.py`` (#3113/#3333), the two
761
+ sites where "did this claim land" is an exclusive-ownership decision the
762
+ rest of the system relies on, unlike most of this module's writers where
763
+ a duplicate-on-retry UPDATE/DELETE is harmless.
764
+
765
+ Unlike :func:`rollback_after_driver_error`, this does not inspect *exc*
766
+ for a SQLSTATE: the plain-SQLite case above is exactly what it exists to
767
+ cover. On Postgres it is a harmless no-op in practice — a failed
768
+ ``COMMIT`` there aborts the whole transaction (so *undo* raises
769
+ ``InFailedSqlTransaction``, suppressed below) and
770
+ :func:`retry_on_locked`'s own :func:`rollback_after_driver_error` call
771
+ has already undone this write for real; ``get_connection()`` also hands
772
+ each THREAD its own connection there (see this module's docstring), so
773
+ no other thread's statement was ever at risk.
774
+
775
+ Same suppression rule as :func:`rollback_after_driver_error`: a ``None``
776
+ *conn* is a no-op, and a failure of *undo* itself is swallowed so it
777
+ never masks *exc*, the exception actually worth seeing. If the
778
+ compensating statement cannot run either (sustained contention
779
+ outlasting even this), this write's own row is left pending for the next
780
+ writer's eventual commit/rollback to resolve — the same residual,
781
+ already-accepted risk :func:`rollback_after_driver_error`'s own
782
+ suppressed-failure path carries today, not a new one.
783
+ """
784
+ if conn is None:
785
+ return
786
+ try:
787
+ undo()
788
+ except Exception: # noqa: BLE001 — never mask the caught driver error
789
+ pass
790
+
791
+
669
792
  # #2538: a handful of consecutive short retries — long enough to ride out a
670
793
  # concurrent writer (the daemon's own passive tick, another `coord merge`/
671
794
  # `coord notify` invocation) that only holds the DB for a moment, short
@@ -52,7 +52,13 @@ from coord.models import (
52
52
  trust_issue_closed_for,
53
53
  )
54
54
  from coord.pr_body_lint import downgrade_closing_keywords, find_closing_references
55
- from coord.state import COORD_DIR, dismiss_drive_escalation, record_uat_verdict
55
+ from coord.state import (
56
+ COORD_DIR,
57
+ baseline_red_merge_blocked,
58
+ baseline_red_streak,
59
+ dismiss_drive_escalation,
60
+ record_uat_verdict,
61
+ )
56
62
  from coord.uat_checks import UatCheckResult, evaluate_uat_checks
57
63
 
58
64
  _log = logging.getLogger(__name__)
@@ -1713,10 +1719,22 @@ def passes_merge_gates(a, config, board, gh_ops: "GhOps | None" = None) -> bool:
1713
1719
  # non-``None`` to run) straight to SMOKE_OK — a verdict this code never
1714
1720
  # actually confirmed still covers the current head. See
1715
1721
  # `UNKNOWN_BRANCH_HEAD_REASON`.
1722
+ #
1723
+ # #3386 adds a fourth: SMOKE_BASELINE_RED_BLOCKED — a `"skipped"` verdict
1724
+ # confirmed `baseline_red` (#3378 item 2) exists and is otherwise fresh, but
1725
+ # this repo has racked up `BASELINE_RED_STREAK_LIMIT` (or more) of them in a
1726
+ # row with no genuine `passed` verdict in between. #1732's "skipped never
1727
+ # goes stale" exemption is deliberately narrower than it looks: it covers a
1728
+ # STRUCTURAL skip (nothing to smoke-test) unconditionally, but a
1729
+ # `baseline_red` skip is a claim that the CURRENT merge base — not the
1730
+ # branch — is why the suite fails, and #3378 found that claim, satisfied
1731
+ # every time, merges a repo whose `main` has been red for 33 days without
1732
+ # anyone noticing. See `coord.state.baseline_red_merge_blocked`.
1716
1733
  SMOKE_OK = "ok"
1717
1734
  SMOKE_MISSING = "missing"
1718
1735
  SMOKE_STALE = "stale"
1719
1736
  SMOKE_UNKNOWN = "unknown"
1737
+ SMOKE_BASELINE_RED_BLOCKED = "baseline_red_blocked"
1720
1738
 
1721
1739
 
1722
1740
  def _short_sha(sha: str | None) -> str:
@@ -1773,6 +1791,9 @@ class SmokeVerdictStatus:
1773
1791
  # sentence. `None` for every other kind, and for a SMOKE_UNKNOWN whose
1774
1792
  # `gh_ops` stand-in didn't support `raise_on_transient` at all.
1775
1793
  probe_error: "GhTransientError | None" = None
1794
+ # #3386: the repo's consecutive baseline-red streak that produced a
1795
+ # SMOKE_BASELINE_RED_BLOCKED verdict — `None` for every other kind.
1796
+ baseline_red_streak: int | None = None
1776
1797
 
1777
1798
  @property
1778
1799
  def short_reason(self) -> str | None:
@@ -1784,6 +1805,11 @@ class SmokeVerdictStatus:
1784
1805
  return None
1785
1806
  if self.kind == SMOKE_UNKNOWN:
1786
1807
  return unknown_branch_head_reason(self.probe_error)
1808
+ if self.kind == SMOKE_BASELINE_RED_BLOCKED:
1809
+ return (
1810
+ f"{self.baseline_red_streak} consecutive baseline-red "
1811
+ "classifications — merge base needs fixing (#3386)"
1812
+ )
1787
1813
  if self.kind == SMOKE_STALE:
1788
1814
  if self.anchor == "run":
1789
1815
  return (
@@ -1810,6 +1836,20 @@ class SmokeVerdictStatus:
1810
1836
  # `unknown_branch_head_reason` appends real status/request-id/
1811
1837
  # retry-after when `probe_error` carries any.
1812
1838
  return unknown_branch_head_reason(self.probe_error)
1839
+ if self.kind == SMOKE_BASELINE_RED_BLOCKED:
1840
+ # #3386: a bypass that still merges is not a bypass. This repo
1841
+ # has recorded `baseline_red_streak` consecutive `baseline-red`
1842
+ # (#2170) classifications with no genuine `passed` verdict in
1843
+ # between — the merge base itself needs fixing before this or
1844
+ # any other branch on this repo merges. Waiving requires
1845
+ # `--skip-smoke`, same as any other smoke refusal; there is no
1846
+ # per-branch fix, only a repo-level one.
1847
+ return (
1848
+ f"merge refused: {self.baseline_red_streak} consecutive "
1849
+ "baseline-red (#2170) classifications on this repo with no "
1850
+ "genuine passed verdict in between — the merge base itself "
1851
+ "needs fixing, not another branch (#3386)"
1852
+ )
1813
1853
  if self.kind == SMOKE_STALE:
1814
1854
  aid = self.assignment_id or "<assignment>"
1815
1855
  if self.anchor == "run":
@@ -3269,88 +3309,145 @@ def evaluate_smoke_verdict(
3269
3309
  # moves — a rename upstream, or new commits on the branch, can't
3270
3310
  # turn "there is nothing here a smoke test could exercise" into
3271
3311
  # false. Only `passed` verdicts go through the #1479 base/branch
3272
- # staleness check below; `skipped` is accepted unconditionally.
3273
- if test_state == "skipped":
3312
+ # staleness check below; a STRUCTURAL `skipped` is accepted
3313
+ # unconditionally, same as always.
3314
+ #
3315
+ # #3386: a `baseline_red`-confirmed skip (#3378 item 2) is NOT that
3316
+ # structural claim — it asserts the merge BASE, not the branch, is
3317
+ # why the suite fails, and that assertion is falsifiable two ways:
3318
+ # * item 3 — this repo has racked up too many of these in a row
3319
+ # with no genuine `passed` in between
3320
+ # (`coord.state.baseline_red_streak`), so even a fresh
3321
+ # one must not merge until the base itself is fixed. A bypass
3322
+ # that still merges every time is not a bypass, it is an outage
3323
+ # with a footnote — confirmed live on #3383 against a `main`
3324
+ # that had been red 33 days.
3325
+ # * item 4 — the branch has since moved on (a fix round pushed new
3326
+ # commits), so the classification no longer describes what is
3327
+ # actually on the branch (#3376's live gate defect: a skip cited
3328
+ # from a since-superseded assignment). Falls through to the same
3329
+ # branch-content check `passed` gets below.
3330
+ # Deliberately does NOT run the base-move check just below even for
3331
+ # a `baseline_red` skip: that check exists to catch a `passed`
3332
+ # MEASUREMENT going stale, whereas "the base is red" is exactly what
3333
+ # this classification already asserts — item 3's streak bound is
3334
+ # what covers a chronically-moving red base instead.
3335
+ test_confirmation = getattr(a, "test_confirmation", None)
3336
+ # "baseline_red" mirrors `coord.confirm_test.TEST_CONFIRMATION_
3337
+ # BASELINE_RED` — kept as a literal (not an import) to avoid a
3338
+ # module-level import of `coord.confirm_test`, which imports
3339
+ # `coord.revalidate`, which imports THIS module. Pinned against
3340
+ # drift by `tests/test_merge_queue.py::TestStaleSmokeVerdictReporting::
3341
+ # test_literal_matches_the_canonical_confirm_test_constant`.
3342
+ is_baseline_red_skip = (
3343
+ test_state == "skipped" and test_confirmation == "baseline_red"
3344
+ )
3345
+ if test_state == "skipped" and not is_baseline_red_skip:
3274
3346
  return SmokeVerdictStatus(
3275
3347
  ok=True, kind=SMOKE_OK, assignment_id=getattr(a, "assignment_id", None)
3276
3348
  )
3277
-
3278
- # Merge base moved: the tested combination (this branch + that base)
3279
- # no longer exists, even if the branch's own diff is unchanged.
3280
- test_base_sha = getattr(a, "test_base_sha", None)
3281
- if (
3282
- test_base_sha is not None
3283
- and current_base_sha is None
3284
- and not base_sha_attempted
3285
- and gh_ops is not None
3286
- and repo_github
3287
- and target_branch
3288
- ):
3289
- current_base_sha, base_sha_probe_failed, base_sha_probe_error = _gh_get_branch_sha(
3290
- gh_ops, repo_github, target_branch
3291
- )
3292
- base_sha_attempted = True
3293
-
3294
- # #2704: the live probe just above positively confirmed it could not
3295
- # read GitHub, while a recorded verdict names a specific base SHA to
3296
- # compare against. Before #2704 a failed (or merely un-attempted)
3297
- # lookup was indistinguishable from a clean `None`, so this fell
3298
- # straight through to the "base moved" check below, which is a
3299
- # silent no-op on `current_base_sha is None` and lets execution
3300
- # reach SMOKE_OK further down: a verdict this call never actually
3301
- # confirmed still covers the current base. Fail closed instead — we
3302
- # do not KNOW whether the base moved, so we cannot vouch for it.
3303
- if test_base_sha is not None and base_sha_probe_failed:
3304
- if unknown is None:
3305
- unknown = SmokeVerdictStatus(
3349
+ if is_baseline_red_skip:
3350
+ # #3386 review: the streak store is keyed by the coordinator's
3351
+ # internal short `repo_name` (what `record_baseline_red_
3352
+ # classification`/`_record_test_verdict_local` write) — NOT by
3353
+ # `repo_github` (an "owner/repo" GitHub slug). A prior version
3354
+ # of this fell back to `repo_github` when `a.repo_name` was
3355
+ # falsy; that fallback would have looked up the wrong key and
3356
+ # silently read streak=0 (never block) had it ever actually
3357
+ # fired. A board-recorded work assignment's `repo_name` should
3358
+ # always be populated, so there is no real fallback value to
3359
+ # have here — dropped rather than kept as dead code with wrong
3360
+ # semantics.
3361
+ repo_for_streak = getattr(a, "repo_name", None)
3362
+ if repo_for_streak and baseline_red_merge_blocked(repo_for_streak):
3363
+ return SmokeVerdictStatus(
3306
3364
  ok=False,
3307
- kind=SMOKE_UNKNOWN,
3365
+ kind=SMOKE_BASELINE_RED_BLOCKED,
3308
3366
  assignment_id=getattr(a, "assignment_id", None),
3309
- anchor="base",
3310
- recorded_sha=test_base_sha,
3311
- probe_error=base_sha_probe_error,
3367
+ baseline_red_streak=baseline_red_streak(repo_for_streak),
3312
3368
  )
3313
- continue
3314
3369
 
3315
- # #1738/#1778/#1847: the base moved, but a moved SHA doesn't
3316
- # necessarily mean a content change that could affect a test result.
3317
- # `_base_move_spared` tries, in order: is the base move itself
3318
- # provably inert content (docs/scripts/issue-template only, #1738);
3319
- # failing that, is *this branch*'s entire diff (as actually tested,
3320
- # test_base_sha..test_head_sha) provably inert (#1778); failing that,
3321
- # do the two diffs simply touch disjoint files (#1847) — a
3322
- # substantive base move and a substantive branch that have nothing to
3323
- # do with each other. Any one being true means the tested combination
3324
- # is still covered — fall through to the branch-content check below
3325
- # instead of staling here. If the branch has since gained real
3326
- # content, that check still catches it independently via the
3327
- # patch-id compare (#1847 doesn't short-circuit it).
3328
3370
  base_move_spare_reason: str | None = None
3329
- if (
3330
- test_base_sha is not None
3331
- and current_base_sha is not None
3332
- and test_base_sha != current_base_sha
3333
- ):
3334
- spared, base_move_spare_reason = _base_move_spared(
3335
- gh_ops,
3336
- repo_github,
3337
- test_base_sha,
3338
- current_base_sha,
3339
- getattr(a, "test_head_sha", None),
3340
- )
3341
- if not spared:
3342
- # stale: re-verify against the new base
3343
- if stale is None:
3344
- stale = SmokeVerdictStatus(
3371
+ test_base_sha = getattr(a, "test_base_sha", None)
3372
+ if test_state == "passed":
3373
+ # Merge base moved: the tested combination (this branch + that
3374
+ # base) no longer exists, even if the branch's own diff is
3375
+ # unchanged. #3386: skipped entirely for a `baseline_red` skip —
3376
+ # see the comment above.
3377
+ if (
3378
+ test_base_sha is not None
3379
+ and current_base_sha is None
3380
+ and not base_sha_attempted
3381
+ and gh_ops is not None
3382
+ and repo_github
3383
+ and target_branch
3384
+ ):
3385
+ current_base_sha, base_sha_probe_failed, base_sha_probe_error = (
3386
+ _gh_get_branch_sha(gh_ops, repo_github, target_branch)
3387
+ )
3388
+ base_sha_attempted = True
3389
+
3390
+ # #2704: the live probe just above positively confirmed it could
3391
+ # not read GitHub, while a recorded verdict names a specific
3392
+ # base SHA to compare against. Before #2704 a failed (or merely
3393
+ # un-attempted) lookup was indistinguishable from a clean
3394
+ # `None`, so this fell straight through to the "base moved"
3395
+ # check below, which is a silent no-op on `current_base_sha is
3396
+ # None` and lets execution reach SMOKE_OK further down: a
3397
+ # verdict this call never actually confirmed still covers the
3398
+ # current base. Fail closed instead — we do not KNOW whether
3399
+ # the base moved, so we cannot vouch for it.
3400
+ if test_base_sha is not None and base_sha_probe_failed:
3401
+ if unknown is None:
3402
+ unknown = SmokeVerdictStatus(
3345
3403
  ok=False,
3346
- kind=SMOKE_STALE,
3404
+ kind=SMOKE_UNKNOWN,
3347
3405
  assignment_id=getattr(a, "assignment_id", None),
3348
3406
  anchor="base",
3349
3407
  recorded_sha=test_base_sha,
3350
- current_sha=current_base_sha,
3408
+ probe_error=base_sha_probe_error,
3351
3409
  )
3352
3410
  continue
3353
3411
 
3412
+ # #1738/#1778/#1847: the base moved, but a moved SHA doesn't
3413
+ # necessarily mean a content change that could affect a test
3414
+ # result. `_base_move_spared` tries, in order: is the base move
3415
+ # itself provably inert content (docs/scripts/issue-template
3416
+ # only, #1738); failing that, is *this branch*'s entire diff (as
3417
+ # actually tested, test_base_sha..test_head_sha) provably inert
3418
+ # (#1778); failing that, do the two diffs simply touch disjoint
3419
+ # files (#1847) — a substantive base move and a substantive
3420
+ # branch that have nothing to do with each other. Any one being
3421
+ # true means the tested combination is still covered — fall
3422
+ # through to the branch-content check below instead of staling
3423
+ # here. If the branch has since gained real content, that check
3424
+ # still catches it independently via the patch-id compare
3425
+ # (#1847 doesn't short-circuit it).
3426
+ if (
3427
+ test_base_sha is not None
3428
+ and current_base_sha is not None
3429
+ and test_base_sha != current_base_sha
3430
+ ):
3431
+ spared, base_move_spare_reason = _base_move_spared(
3432
+ gh_ops,
3433
+ repo_github,
3434
+ test_base_sha,
3435
+ current_base_sha,
3436
+ getattr(a, "test_head_sha", None),
3437
+ )
3438
+ if not spared:
3439
+ # stale: re-verify against the new base
3440
+ if stale is None:
3441
+ stale = SmokeVerdictStatus(
3442
+ ok=False,
3443
+ kind=SMOKE_STALE,
3444
+ assignment_id=getattr(a, "assignment_id", None),
3445
+ anchor="base",
3446
+ recorded_sha=test_base_sha,
3447
+ current_sha=current_base_sha,
3448
+ )
3449
+ continue
3450
+
3354
3451
  # Branch content changed since the test ran. Same SHA-then-patch-id
3355
3452
  # fallback as has_approved_review: a content-identical rebase (SHA
3356
3453
  # moved, patch-id didn't) does not invalidate the verdict.