code-coordinator 0.5.490__tar.gz → 0.5.492__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.490 → code_coordinator-0.5.492}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/test_gate.py +39 -0
  5. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/diagnose.py +164 -0
  6. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/merge_queue.py +165 -68
  7. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/state.py +315 -0
  8. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test.py +54 -0
  9. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_diagnose.py +153 -0
  10. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gates.py +24 -0
  11. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_merge_queue.py +126 -0
  12. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_state.py +212 -0
  13. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/.gitignore +0 -0
  26. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/GOAL.md +0 -0
  28. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/LICENSE +0 -0
  29. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/README.md +0 -0
  31. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/backup.py +0 -0
  51. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/board_schema.py +0 -0
  53. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/client.py +0 -0
  67. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/codegen.py +0 -0
  76. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/dr.py +0 -0
  79. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/commands/tui.py +0 -0
  103. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/comments.py +0 -0
  104. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/config.py +0 -0
  105. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/config_reload.py +0 -0
  106. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/confirm_test.py +0 -0
  107. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/conflict_fix.py +0 -0
  108. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/db.py +0 -0
  115. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/decomposition_chat.py +0 -0
  117. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/README.md +0 -0
  118. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-agent.service +0 -0
  119. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-backup.service +0 -0
  120. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-backup.timer +0 -0
  121. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-dr-verify.service +0 -0
  125. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-dr-verify.timer +0 -0
  126. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deprecation_telemetry.py +0 -0
  144. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/deps.py +0 -0
  145. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dispatch.py +0 -0
  146. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dispatch_liveness.py +0 -0
  147. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dist_name.py +0 -0
  148. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dr_promote.py +0 -0
  149. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/dr_verify.py +0 -0
  150. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/drive.py +0 -0
  151. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/drive_queue.py +0 -0
  152. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/drive_state.py +0 -0
  153. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/events.py +0 -0
  154. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/failure_class.py +0 -0
  155. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/failure_classifier.py +0 -0
  156. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/filelock.py +0 -0
  157. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/fleet_config_health.py +0 -0
  158. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/forge_availability.py +0 -0
  159. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/freshness.py +0 -0
  160. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gate_a.py +0 -0
  161. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gate_b.py +0 -0
  162. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gate_snapshot.py +0 -0
  163. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gates.py +0 -0
  164. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/gen_board_fixture.py +0 -0
  165. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/github_ops.py +0 -0
  166. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/github_throttle.py +0 -0
  167. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/goal.py +0 -0
  168. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/graph_health.py +0 -0
  169. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/__init__.py +0 -0
  170. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/aggregate.py +0 -0
  171. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/__init__.py +0 -0
  172. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/_ci_pin.py +0 -0
  173. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/agent_install.py +0 -0
  174. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/cargo_targets.py +0 -0
  175. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/claude_binary.py +0 -0
  176. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/config_drift.py +0 -0
  177. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  178. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/coord_web_ci_pin.py +0 -0
  179. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/deploy_lane_facts.py +0 -0
  180. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/disk.py +0 -0
  181. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_board.py +0 -0
  182. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  183. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_phantom.py +0 -0
  184. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/fleet_unit_drift.py +0 -0
  185. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/graph.py +0 -0
  186. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/graphify_cli.py +0 -0
  187. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/index_lock.py +0 -0
  188. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/issues_sync_staleness.py +0 -0
  189. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/plan_usage.py +0 -0
  190. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/pr_churn.py +0 -0
  191. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/release_cordon.py +0 -0
  192. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/repo_state.py +0 -0
  193. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/spawned_coord.py +0 -0
  194. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/stalled_pipeline.py +0 -0
  195. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/timer_active.py +0 -0
  196. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/toolchain.py +0 -0
  197. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/unit_drift.py +0 -0
  198. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/unit_enablement.py +0 -0
  199. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/wedged_drive_queue.py +0 -0
  200. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/checks/worktrees.py +0 -0
  201. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/cli.py +0 -0
  202. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/context.py +0 -0
  203. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/fleet_snapshot.py +0 -0
  204. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/models.py +0 -0
  205. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/pypi.py +0 -0
  206. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/registry.py +0 -0
  207. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/render.py +0 -0
  208. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/health/units.py +0 -0
  209. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/hooks.py +0 -0
  210. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/housekeeping.py +0 -0
  211. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/interactive.py +0 -0
  212. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/invariant_alarms.py +0 -0
  213. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/issue_store.py +0 -0
  214. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/issues_sync_status.py +0 -0
  215. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/liveness_auditor.py +0 -0
  216. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_fault.py +0 -0
  217. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_metrics.py +0 -0
  218. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_onboard.py +0 -0
  219. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_pause.py +0 -0
  220. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/machine_stats.py +0 -0
  221. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_chat.py +0 -0
  222. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_dispatch.py +0 -0
  223. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_gate.py +0 -0
  224. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/milestone_order.py +0 -0
  225. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/mock_author.py +0 -0
  226. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/models.py +0 -0
  227. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/network.py +0 -0
  228. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/new_issue_chat.py +0 -0
  229. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/__init__.py +0 -0
  230. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/baseline.py +0 -0
  231. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/cli.py +0 -0
  232. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/collect.py +0 -0
  233. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/digest.py +0 -0
  234. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/models.py +0 -0
  235. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/predicate.py +0 -0
  236. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/service.py +0 -0
  237. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/store.py +0 -0
  238. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notifier/transport.py +0 -0
  239. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/notify.py +0 -0
  240. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/openapi.py +0 -0
  241. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/overlap_fence.py +0 -0
  242. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/overlap_predict.py +0 -0
  243. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/parentage.py +0 -0
  244. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/parentage_github.py +0 -0
  245. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/pipeline.py +0 -0
  246. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/plan_parser.py +0 -0
  247. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/plans.py +0 -0
  248. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/platform_paths.py +0 -0
  249. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/portal_bridge.py +0 -0
  250. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/portal_store.py +0 -0
  251. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/portal_sync.py +0 -0
  252. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/pr_body_lint.py +0 -0
  253. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/prereqs.py +0 -0
  254. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/progress.py +0 -0
  255. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/__init__.py +0 -0
  256. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/base.py +0 -0
  257. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/claude.py +0 -0
  258. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/claude_pty.py +0 -0
  259. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/providers/opencode.py +0 -0
  260. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/queue_diagnose.py +0 -0
  261. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/reconcile.py +0 -0
  262. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/reconcile_tick.py +0 -0
  263. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/refine_chat.py +0 -0
  264. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_cordon.py +0 -0
  265. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_propagate.py +0 -0
  266. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_verify.py +0 -0
  267. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/release_window.py +0 -0
  268. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/repo_dormancy.py +0 -0
  269. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/repo_edit.py +0 -0
  270. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/repo_onboard.py +0 -0
  271. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/reports.py +0 -0
  272. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/rest_schema.py +0 -0
  273. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/revalidate.py +0 -0
  274. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/review.py +0 -0
  275. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/scorecard.py +0 -0
  276. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/self_health.py +0 -0
  277. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/serve_app.py +0 -0
  278. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  279. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  280. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  281. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  282. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/portal-followup/SKILL.md +0 -0
  284. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/release-now/SKILL.md +0 -0
  285. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  286. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  287. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/skills/update-issue/SKILL.md +0 -0
  288. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/smoke.py +0 -0
  289. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/spend_ceiling.py +0 -0
  290. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/split_work.py +0 -0
  291. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/sql.py +0 -0
  292. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/stage_projection.py +0 -0
  293. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/store_migrate.py +0 -0
  294. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/store_parity.py +0 -0
  295. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/templates/deploy-cloudflare.node.yml +0 -0
  296. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_author.py +0 -0
  297. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_chat.py +0 -0
  298. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_orchestrator.py +0 -0
  299. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/test_report.py +0 -0
  300. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/tui_release.py +0 -0
  301. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/uat_checks.py +0 -0
  302. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/usage.py +0 -0
  303. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/usage_limits.py +0 -0
  304. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/usage_rollup.py +0 -0
  305. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coord/worker_events.py +0 -0
  306. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/coordinator.example.yml +0 -0
  307. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-agent.service +0 -0
  308. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-backup.service +0 -0
  309. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-backup.timer +0 -0
  310. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-db-backup.service +0 -0
  311. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-db-backup.sh +0 -0
  312. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-db-backup.timer +0 -0
  313. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-dr-verify.service +0 -0
  314. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-dr-verify.timer +0 -0
  315. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-drive-queue.service +0 -0
  316. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-drive-queue.timer +0 -0
  317. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-failure-notify.service +0 -0
  318. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-failure-notify.sh +0 -0
  319. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-fleet-watchdog.service +0 -0
  320. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-fleet-watchdog.timer +0 -0
  321. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-notify.service +0 -0
  322. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-notify.timer +0 -0
  323. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-propagate.service +0 -0
  324. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-propagate.timer +0 -0
  325. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-window.service +0 -0
  326. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-release-window.timer +0 -0
  327. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-serve.service +0 -0
  328. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-dist-build.service +0 -0
  329. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-dist-build.sh +0 -0
  330. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-dist-build.timer +0 -0
  331. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web-rollback.sh +0 -0
  332. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/coord-web.service +0 -0
  333. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/deploy/node-shim.sh +0 -0
  334. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_TUI_CI.md +0 -0
  335. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  336. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_WEB_CI.md +0 -0
  337. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_COORD_WEB_DIST.md +0 -0
  338. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  339. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/AGENT_OPERATIONS.md +0 -0
  340. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ARCHITECTURE.md +0 -0
  341. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ARCH_SECURITY_GATES.md +0 -0
  342. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/COCKPIT.md +0 -0
  343. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CONTROL_CENTER.md +0 -0
  344. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/COST_DISCIPLINE.md +0 -0
  345. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CROSS_PLATFORM.md +0 -0
  346. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CUSTOMER_FACING_APPS.md +0 -0
  347. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/CUSTOMER_PORTAL.md +0 -0
  348. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/DATA_STORE_SELECTION.md +0 -0
  349. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/DISASTER_RECOVERY.md +0 -0
  350. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/DRIVE_QUEUE.md +0 -0
  351. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/EPHEMERAL_WORKERS.md +0 -0
  352. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/FORGE_MIGRATION.md +0 -0
  353. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/GRAPHIFY_SETUP.md +0 -0
  354. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ISSUE_GUIDANCE.md +0 -0
  355. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/MAC_MINI.md +0 -0
  356. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  357. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/NOTIFIER.md +0 -0
  358. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/OPENCODE_VERIFICATION.md +0 -0
  359. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/OPERATING_GOTCHAS.md +0 -0
  360. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/OPERATOR_GUIDES.md +0 -0
  361. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/ORACLE_LOOP.md +0 -0
  362. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/PHONE_WEBAPP.md +0 -0
  363. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/PIPELINE_V2.md +0 -0
  364. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/PLATFORM_EVOLUTION.md +0 -0
  365. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/SECOND_BACKEND.md +0 -0
  366. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/STORE_SERVICE.md +0 -0
  367. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  368. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/WEB_CONTROL_CENTER.md +0 -0
  369. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/WSL_WINDOWS_WORKER.md +0 -0
  370. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/README.md +0 -0
  371. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/_tokens.css +0 -0
  372. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/issue-detail.html +0 -0
  373. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/pipeline-narrow.html +0 -0
  374. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/docs/mocks/web/pipeline-wide.html +0 -0
  375. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/graphify-out/.gitignore +0 -0
  376. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/install-agent.sh +0 -0
  377. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/pyproject.toml +0 -0
  378. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/audit_review_verdict_overrides.py +0 -0
  379. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  380. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/build-worker-image.sh +0 -0
  381. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/coordinator-machine.py +0 -0
  382. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/dr-down.sh +0 -0
  383. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/dr-up.sh +0 -0
  384. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/epic-down.sh +0 -0
  385. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/epic-up.sh +0 -0
  386. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/preflight.sh +0 -0
  387. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/provision-server.sh +0 -0
  388. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/provision-worker.sh +0 -0
  389. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  390. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  391. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/throwaway-vm.sh +0 -0
  392. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/azure-workers/verify-github-token.sh +0 -0
  393. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/check_gh_argv_containment.py +0 -0
  394. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/codegen.py +0 -0
  395. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-test-runner.sh +0 -0
  396. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  397. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  398. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  399. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  400. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/coord-venv-rollback.sh +0 -0
  401. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/drive-batch.sh +0 -0
  402. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/extract-coord-tui.sh +0 -0
  403. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/fleet_watchdog.py +0 -0
  404. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/gen_board_fixture.py +0 -0
  405. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/gen_mock_index.py +0 -0
  406. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/lib/provision-core.sh +0 -0
  407. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/next_release_tag.py +0 -0
  408. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/provision-machine.sh +0 -0
  409. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/run_tests_in_populated_home.sh +0 -0
  410. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/run_tests_without_gh.sh +0 -0
  411. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/setup-macmini.sh +0 -0
  412. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/smoke_437_interactive.py +0 -0
  413. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify-provision-noble.sh +0 -0
  414. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify_878_review_capture.py +0 -0
  415. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify_release_published.py +0 -0
  416. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/scripts/verify_release_wheel.py +0 -0
  417. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/setup.cfg +0 -0
  418. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/SMOKE_SET.md +0 -0
  419. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/__init__.py +0 -0
  420. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/conftest.py +0 -0
  421. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/contract.md +0 -0
  422. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/manifest.yml +0 -0
  423. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  424. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  425. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/contract.md +0 -0
  426. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  427. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  428. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/manifest.yml +0 -0
  429. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  430. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-51/tsconfig.json +0 -0
  431. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  432. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/backends.py +0 -0
  433. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/conftest.py +0 -0
  434. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/board-pipeline-basic.json +0 -0
  435. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  436. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  437. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  438. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  439. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/all_pass.json +0 -0
  440. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  441. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/mixed_fail.json +0 -0
  442. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  443. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  444. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/skip.json +0 -0
  445. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/playwright/truncated.json +0 -0
  446. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  447. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  448. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  449. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  450. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  451. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  452. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  453. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  454. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_acceptance.py +0 -0
  455. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_acceptance_drivers.py +0 -0
  456. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent.py +0 -0
  457. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_api_error.py +0 -0
  458. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_app.py +0 -0
  459. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_branch_base.py +0 -0
  460. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_branch_capture.py +0 -0
  461. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_config_free_1712.py +0 -0
  462. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_deploy_units_endpoint.py +0 -0
  463. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_dirty_worktree.py +0 -0
  464. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  465. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_graph_self_heal.py +0 -0
  466. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_health_h3.py +0 -0
  467. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_idle_restart.py +0 -0
  468. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_push_failure.py +0 -0
  469. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_reap.py +0 -0
  470. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_repos_and_pull.py +0 -0
  471. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_restart_services_endpoint.py +0 -0
  472. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_skills_self_heal.py +0 -0
  473. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_startup_diagnostics.py +0 -0
  474. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_update.py +0 -0
  475. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_update_bluegreen.py +0 -0
  476. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_usage_limit.py +0 -0
  477. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_agent_zero_commit.py +0 -0
  478. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ambient_home_isolation.py +0 -0
  479. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_capability_reroute_3241.py +0 -0
  480. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_dependency_busy_2804.py +0 -0
  481. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_reject_plan.py +0 -0
  482. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approve_usage_gate.py +0 -0
  483. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approved_work_2532.py +0 -0
  484. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_approved_work_2996.py +0 -0
  485. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_assignment_already_recorded_daemon.py +0 -0
  486. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_audit_log.py +0 -0
  487. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_audit_outcome.py +0 -0
  488. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_audit_query.py +0 -0
  489. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_auto_loop.py +0 -0
  490. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_auto_release_publish_2035.py +0 -0
  491. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_backend_selection.py +0 -0
  492. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_backup.py +0 -0
  493. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_base_checkout_restore.py +0 -0
  494. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_block_log.py +0 -0
  495. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_cap_762.py +0 -0
  496. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_fixture.py +0 -0
  497. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_read_path.py +0 -0
  498. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_schema.py +0 -0
  499. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_service.py +0 -0
  500. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_state.py +0 -0
  501. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_board_wire.py +0 -0
  502. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_brain.py +0 -0
  503. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_branch_model.py +0 -0
  504. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_bug_intake.py +0 -0
  505. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_build_worker_image_env_update.py +0 -0
  506. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cargo_cache.py +0 -0
  507. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_check_gh_argv_containment.py +0 -0
  508. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_acceptance_gate_1950.py +0 -0
  509. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_fix.py +0 -0
  510. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_github.py +0 -0
  511. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_gitlab.py +0 -0
  512. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_parity_2091.py +0 -0
  513. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_ci_store.py +0 -0
  514. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_claim.py +0 -0
  515. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_claude_md_budget.py +0 -0
  516. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_claude_setup_token.py +0 -0
  517. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_acceptance.py +0 -0
  518. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign.py +0 -0
  519. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  520. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_interactive_remote.py +0 -0
  521. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_provider.py +0 -0
  522. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  523. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_audit.py +0 -0
  524. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_chat_continue.py +0 -0
  525. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_codegen.py +0 -0
  526. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_decide.py +0 -0
  527. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_capability_rules.py +0 -0
  528. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_config_provenance.py +0 -0
  529. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_forge_availability.py +0 -0
  530. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_graph.py +0 -0
  531. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_self.py +0 -0
  532. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_diagnose_test_coverage.py +0 -0
  533. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor.py +0 -0
  534. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor_config_free_1801.py +0 -0
  535. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  536. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  537. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_drive.py +0 -0
  538. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_drive_queue.py +0 -0
  539. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_escalate.py +0 -0
  540. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_fix_headless_review.py +0 -0
  541. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_gate_a.py +0 -0
  542. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_install_drift.py +0 -0
  543. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_install_skills.py +0 -0
  544. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_comment.py +0 -0
  545. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_create_label.py +0 -0
  546. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_reopen.py +0 -0
  547. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_issue_view_list.py +0 -0
  548. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_merge.py +0 -0
  549. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_assign.py +0 -0
  550. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_capture.py +0 -0
  551. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_chat_add_child.py +0 -0
  552. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_dispatch.py +0 -0
  553. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_gate_b.py +0 -0
  554. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_gate_c.py +0 -0
  555. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_order.py +0 -0
  556. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  557. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_milestone_ship.py +0 -0
  558. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_network.py +0 -0
  559. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_new_issue_chat.py +0 -0
  560. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_plans.py +0 -0
  561. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_portal.py +0 -0
  562. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_pr.py +0 -0
  563. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_pull_artifact.py +0 -0
  564. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_queue.py +0 -0
  565. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_reattach_sessions.py +0 -0
  566. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_refine_board.py +0 -0
  567. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_release_preflight.py +0 -0
  568. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_release_propagate.py +0 -0
  569. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_release_window.py +0 -0
  570. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_repo_2220.py +0 -0
  571. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  572. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_scorecard.py +0 -0
  573. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_serve_store_backend_3084.py +0 -0
  574. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_set_review_findings.py +0 -0
  575. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_advisory_terminal.py +0 -0
  576. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_contested_tag.py +0 -0
  577. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_invariant_alarms.py +0 -0
  578. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_machine_fault.py +0 -0
  579. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_merge_queue.py +0 -0
  580. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_provider.py +0 -0
  581. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_retried_3340.py +0 -0
  582. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_review_finalizing.py +0 -0
  583. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_test_failed_tag.py +0 -0
  584. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_status_usage_limit.py +0 -0
  585. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_sync_comments_873.py +0 -0
  586. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_test_plan.py +0 -0
  587. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_track.py +0 -0
  588. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_tui_update.py +0 -0
  589. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cli_wait.py +0 -0
  590. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client.py +0 -0
  591. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client_base_install.py +0 -0
  592. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client_config_cache_atomic_3052.py +0 -0
  593. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_client_resource_migration_1946.py +0 -0
  594. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_commands_common.py +0 -0
  595. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_comments.py +0 -0
  596. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_completion_summary.py +0 -0
  597. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config.py +0 -0
  598. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_acceptance.py +0 -0
  599. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_audit.py +0 -0
  600. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_drift_check.py +0 -0
  601. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_pricing.py +0 -0
  602. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  603. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_config_usage_gate.py +0 -0
  604. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_confirm_test.py +0 -0
  605. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_conflict_fix.py +0 -0
  606. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_conflict_fix_semantic.py +0 -0
  607. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  608. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  609. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_baseline.py +0 -0
  610. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_populated_home.py +0 -0
  611. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_routing.py +0 -0
  612. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_test_runner_toolchain.py +0 -0
  613. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_uat.py +0 -0
  614. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coord_web_sse_restart_live.py +0 -0
  615. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_coordinator_machine.py +0 -0
  616. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_cross_platform_imports.py +0 -0
  617. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dao.py +0 -0
  618. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard.py +0 -0
  619. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_api.py +0 -0
  620. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_fixture.py +0 -0
  621. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_server.py +0 -0
  622. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_terminal.py +0 -0
  623. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dashboard_terminal_live.py +0 -0
  624. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_db.py +0 -0
  625. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dead_end.py +0 -0
  626. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_decomposition_chat.py +0 -0
  627. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_coord_db_backup.py +0 -0
  628. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_coord_web_dist.py +0 -0
  629. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_coord_web_rollback.py +0 -0
  630. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_db_backup_unit.py +0 -0
  631. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_drive_queue_unit.py +0 -0
  632. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_failure_notify_unit.py +0 -0
  633. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_manifest.py +0 -0
  634. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_notify_unit.py +0 -0
  635. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_units_lane.py +0 -0
  636. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deploy_web_unit.py +0 -0
  637. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deprecation_telemetry.py +0 -0
  638. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_deps.py +0 -0
  639. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch.py +0 -0
  640. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch_liveness.py +0 -0
  641. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch_target_validation.py +0 -0
  642. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dispatch_workers.py +0 -0
  643. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dist_name.py +0 -0
  644. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_done_housekeeping.py +0 -0
  645. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dr_azure_scripts.py +0 -0
  646. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dr_promote.py +0 -0
  647. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_dr_verify.py +0 -0
  648. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive.py +0 -0
  649. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_machine_fault.py +0 -0
  650. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue.py +0 -0
  651. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_blocked_rendering.py +0 -0
  652. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_launch_argv.py +0 -0
  653. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  654. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_roll_pending.py +0 -0
  655. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  656. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_state.py +0 -0
  657. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_drive_tmux.py +0 -0
  658. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_epic_up_capability_detection.py +0 -0
  659. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  660. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_epic_up_image_provenance.py +0 -0
  661. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_errors.py +0 -0
  662. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_events.py +0 -0
  663. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_failure_class.py +0 -0
  664. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_failure_classifier.py +0 -0
  665. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_filelock.py +0 -0
  666. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  667. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fix_escalation_classifier.py +0 -0
  668. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fix_of_force_override.py +0 -0
  669. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_config_health.py +0 -0
  670. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_health_probes.py +0 -0
  671. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_health_snapshot.py +0 -0
  672. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_fleet_watchdog.py +0 -0
  673. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_forge_availability.py +0 -0
  674. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_freshness.py +0 -0
  675. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gate_a.py +0 -0
  676. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gate_b.py +0 -0
  677. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gate_snapshot_staleness.py +0 -0
  678. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  679. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_gen_mock_index.py +0 -0
  680. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_generated_rust_fixture.py +0 -0
  681. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_generated_rust_requests.py +0 -0
  682. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_generated_types_fixture.py +0 -0
  683. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_github_ops.py +0 -0
  684. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_github_throttle.py +0 -0
  685. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_goal.py +0 -0
  686. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_graph_health.py +0 -0
  687. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_graph_selfheal_absent_2237.py +0 -0
  688. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_handoff.py +0 -0
  689. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_checks.py +0 -0
  690. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_cli.py +0 -0
  691. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_cli_graph.py +0 -0
  692. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_config.py +0 -0
  693. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_context.py +0 -0
  694. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_coord_tui_ci_pin.py +0 -0
  695. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_coord_web_ci_pin.py +0 -0
  696. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_deploy_lane_facts.py +0 -0
  697. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_fix.py +0 -0
  698. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_incident_regression.py +0 -0
  699. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_issues_sync_staleness.py +0 -0
  700. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_pr_churn.py +0 -0
  701. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_pypi.py +0 -0
  702. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_registry.py +0 -0
  703. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_release_cordon_probe.py +0 -0
  704. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_timer_active.py +0 -0
  705. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_toolchain.py +0 -0
  706. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_unit_drift.py +0 -0
  707. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_unit_enablement.py +0 -0
  708. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_health_wedged_drive_queue.py +0 -0
  709. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_hooks.py +0 -0
  710. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_housekeeping.py +0 -0
  711. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_human_attended_437.py +0 -0
  712. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_init.py +0 -0
  713. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_install_agent_venv_2911.py +0 -0
  714. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_integration.py +0 -0
  715. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_briefing_echo.py +0 -0
  716. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_pane_log_2541.py +0 -0
  717. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_prefill_state.py +0 -0
  718. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_session_relaunch.py +0 -0
  719. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_test_verdict_backstop.py +0 -0
  720. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_token_attribution.py +0 -0
  721. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_interactive_worktree.py +0 -0
  722. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_invariant_alarms.py +0 -0
  723. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_issue_store_seam.py +0 -0
  724. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_issues_sync_status.py +0 -0
  725. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_liveness_auditor.py +0 -0
  726. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_liveness_notify.py +0 -0
  727. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_lock_contention_ratchet.py +0 -0
  728. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_fault.py +0 -0
  729. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_metrics.py +0 -0
  730. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_onboard.py +0 -0
  731. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_pause.py +0 -0
  732. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_machine_stats.py +0 -0
  733. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.490 → code_coordinator-0.5.492}/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.490
3
+ Version: 0.5.492
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.490
3
+ Version: 0.5.492
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.490",
2
+ "tag": "0.5.492",
3
3
  "distance": 0,
4
- "node": "gfb5dc047d0e9acfa22f379bebb343d14c749080c",
4
+ "node": "gf825ecb0009197eb0b97ba8d836676c545ec6a00",
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
@@ -735,6 +735,22 @@ def diagnose_stage(
735
735
  latest = _latest(assignments)
736
736
 
737
737
  if latest is None:
738
+ # #3383: a `review_claims` row held for a work assignment with ZERO
739
+ # review/test-author/mock-author rows (never dispatched, or all
740
+ # deleted) is unreachable from `_recover_review` below — that
741
+ # function only ever runs once `latest` above is non-None. Before
742
+ # this, `--stage review` hit this exact branch and reported the
743
+ # stage healthy while `dispatch_review` was permanently wedged
744
+ # behind the leaked claim (#3206's failure one state earlier — see
745
+ # `_leaked_review_claim_without_row`'s docstring). Checked BEFORE
746
+ # the "no review assignment" finding below, on claim state rather
747
+ # than on row existence, exactly as #3206 already does once a row
748
+ # exists.
749
+ if stage == "review" and _leaked_review_claim_without_row(
750
+ board, repo_name, issue_number, res, reset=reset, dry_run=dry_run,
751
+ ):
752
+ _cleanup_issue(board, config, repo_name, issue_number, res, dry_run=dry_run, reset=reset)
753
+ return res
738
754
  res.findings.append(f"no {stage} assignment on the board for #{issue_number}")
739
755
  res.recovered = True # nothing wedged
740
756
  # Still run the issue-wide cleanup below.
@@ -818,6 +834,154 @@ def diagnose_stage(
818
834
  return res
819
835
 
820
836
 
837
+ # #3383: a claim taken by `claim_review_dispatch` shortly before its caller
838
+ # inserts the review row it's claiming for looks, from a single read,
839
+ # identical to a genuinely leaked claim — the same false-positive window
840
+ # `_recover_review` below already documents for the terminal-row case
841
+ # (#3206). Below this age the claim is reported but NOT offered for release;
842
+ # above it, treated as leaked.
843
+ #
844
+ # NOT short on purpose — `dispatch_review` (coord/review.py) claims at
845
+ # `claim_review_dispatch` (~line 3070) and does NOT insert the review's
846
+ # `assignments` row until `record_dispatched_assignment` (~line 3763); its
847
+ # own `except Exception` handler at ~line 3815 calls the ~500 lines between
848
+ # those two points "pr_lookup, briefing assembly, JSON handling of
849
+ # agent_response, ...". That gap includes several sequential GitHub API
850
+ # calls (`work_is_terminal`, `branch_commits_ahead`, `pr_lookup`,
851
+ # `branch_exists_on_remote`, `pr_diff`, `get_compare_files`,
852
+ # `get_compare_diff`, `get_pr_commit_messages`, an issue-body fetch) and then
853
+ # a candidate loop that POSTs to each reviewer machine's `/assign` with
854
+ # `timeout=ASSIGN_POST_TIMEOUT_SECS` (`coord/dispatch.py` — 60.0s),
855
+ # falling through to the next candidate on rejection/timeout/unreachability.
856
+ # A single slow/unreachable first-choice reviewer machine alone can burn the
857
+ # full 60s before a second candidate is even tried, and there is no hard cap
858
+ # on candidate count — so this has to clear that whole chain, not one
859
+ # network round trip. Picked as a small multiple of minutes so it
860
+ # comfortably outlasts a worst-case multi-candidate dispatch plus GitHub API
861
+ # latency, while still being short enough that a *genuinely* leaked claim
862
+ # doesn't sit unrecoverable for long once someone runs `--reset`.
863
+ _REVIEW_CLAIM_LEAK_GRACE_SECS = 600.0
864
+
865
+
866
+ def _leaked_review_claim_without_row(
867
+ board: "Board",
868
+ repo_name: str,
869
+ issue_number: int,
870
+ res: DiagnoseResult,
871
+ *,
872
+ reset: bool,
873
+ dry_run: bool,
874
+ ) -> bool:
875
+ """#3383: detect (and, under ``--reset``, release) a leaked
876
+ ``review_claims`` row for a work assignment that has NO review /
877
+ test-author / mock-author row at all — the one shape `_recover_review`
878
+ can never see, because `diagnose_stage` only calls it once
879
+ `stage_assignments(..., "review")` finds a row. A claim can be (and, per
880
+ the issue that reported this, was) taken and never released when the
881
+ work assignment it's keyed on was dispatched to review, that review
882
+ never got as far as inserting its own `assignments` row (or its row was
883
+ later deleted, e.g. by an earlier `--reset`), and the claim outlived it.
884
+ Every future `dispatch_review` for that work assignment then denies
885
+ forever with the misleading #3113 "lost the atomic dispatch-claim race"
886
+ reason — while `coord diagnose --stage review` (which hit the
887
+ `latest is None` "no review assignment" branch before this function
888
+ existed) reported the stage healthy.
889
+
890
+ Checked against the WORK assignment's id — `claim_review_dispatch` is
891
+ keyed on the id of the assignment BEING reviewed, never on a review
892
+ row's own id (see `_recover_review`'s `work_assignment_id` resolution).
893
+
894
+ Returns ``True`` when a claim was found (whether or not it could be
895
+ released yet — see the grace-period case) and this function has already
896
+ appended the appropriate finding(s); ``False`` when there is nothing to
897
+ report, in which case the caller's own "no review assignment" message
898
+ is the correct (healthy) diagnosis.
899
+ """
900
+ from coord.state import ( # noqa: PLC0415
901
+ has_review_claim,
902
+ release_review_dispatch_claim,
903
+ review_claim_age_secs,
904
+ )
905
+
906
+ # Narrowing, acknowledged: this only checks the NEWEST `work`-type row
907
+ # for the issue, whereas `claim_review_dispatch` is keyed on whatever
908
+ # work-assignment id `dispatch_review` was actually called with. If the
909
+ # issue ever accumulates more than one `work` row (e.g. a rework/retry
910
+ # dispatched after the original work assignment that leaked the claim),
911
+ # a claim held on the *older* id is invisible here because this checks
912
+ # only the *newest* one. `_recover_review` avoids this by reading the
913
+ # exact id off the review row's own `review_of_assignment_id` FK — there
914
+ # is no review row here to read that FK from, so this has to guess.
915
+ # Probably rare, and the issue's own "worth also considering" `coord
916
+ # doctor` suggestion is the more complete fix; left as a known gap
917
+ # rather than iterating over every `work` row here.
918
+ work_rows = stage_assignments(board, repo_name, issue_number, "work")
919
+ work_latest = _latest(work_rows)
920
+ if work_latest is None or not work_latest.assignment_id:
921
+ return False
922
+ work_assignment_id = work_latest.assignment_id
923
+ if not has_review_claim(work_assignment_id):
924
+ return False
925
+
926
+ age = review_claim_age_secs(work_assignment_id)
927
+ if age is not None and age < _REVIEW_CLAIM_LEAK_GRACE_SECS:
928
+ # Too fresh to distinguish from an in-flight `dispatch_review` call
929
+ # that has taken the claim but not yet inserted its review row —
930
+ # report it, but don't offer to release something that might still
931
+ # be a live, wanted dispatch.
932
+ res.findings.append(
933
+ f"work assignment {work_assignment_id} holds a review-dispatch "
934
+ f"claim taken {age:.1f}s ago with no review row yet — likely an "
935
+ "in-flight dispatch_review, not a leak; re-run diagnose again "
936
+ "shortly if this persists"
937
+ )
938
+ res.recovered = True
939
+ return True
940
+
941
+ res.findings.append(
942
+ f"no review assignment exists for #{issue_number}, but work "
943
+ f"assignment {work_assignment_id} still holds a review-dispatch "
944
+ "claim (leaked review_claims row, #3383 — the #3206 class one state "
945
+ "earlier) — every future dispatch_review for this work assignment "
946
+ "will deny with the misleading #3113 'lost the atomic dispatch-claim "
947
+ "race' reason until it is released. Re-run with --reset to release it."
948
+ )
949
+ res.recovered = False
950
+ res.needs_reset = True
951
+
952
+ if reset:
953
+ if dry_run:
954
+ res.findings.append(
955
+ "(dry-run) would release the leaked review-dispatch claim"
956
+ )
957
+ return True
958
+ release_review_dispatch_claim(work_assignment_id)
959
+ if has_review_claim(work_assignment_id):
960
+ res.findings.append(
961
+ f"release requested for {work_assignment_id}'s "
962
+ "review-dispatch claim, but it is still present on re-read "
963
+ "— the release did NOT persist"
964
+ )
965
+ else:
966
+ res.actions_taken.append(
967
+ "released leaked review-dispatch claim for work assignment "
968
+ f"{work_assignment_id} — dispatch_review is now re-dispatchable"
969
+ )
970
+ res.reset_performed = True
971
+ res.recovered = True
972
+ res.branch_preserved = True
973
+ # Matches `_do_reset`'s (#3206) convention: a successful release
974
+ # must clear the `needs_reset=True` set a few lines above, or
975
+ # `to_json_dict()` — documented as read by the TUI without
976
+ # scraping human-readable lines — carries the internally
977
+ # contradictory `recovered=true needs_reset=true
978
+ # reset_performed=true` even though the plain-text CLI's "still
979
+ # wedged" warning happens to be gated on `not reset` and so never
980
+ # shows it.
981
+ res.needs_reset = False
982
+ return True
983
+
984
+
821
985
  def _recover_review(
822
986
  board, config, latest, state, res: DiagnoseResult, *, dry_run: bool
823
987
  ) -> None:
@@ -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.