code-coordinator 0.5.492__tar.gz → 0.5.494__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (897) hide show
  1. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/drive_queue.py +281 -49
  5. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/db.py +123 -0
  6. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/merge_queue.py +14 -6
  7. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/state.py +171 -29
  8. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_drive_queue.py +156 -0
  9. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_db.py +118 -0
  10. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_state.py +423 -0
  11. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.claude/commands/board.md +0 -0
  12. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.claude/commands/complete-session.md +0 -0
  13. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.claude/commands/coordinator.md +0 -0
  14. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/_lib.sh +0 -0
  15. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/post-checkout +0 -0
  16. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/post-commit +0 -0
  17. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.githooks/post-merge +0 -0
  18. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/coord-ci-acceptance.yml +0 -0
  20. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/workflows/auto-release.yml +0 -0
  21. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.github/workflows/test.yml +0 -0
  23. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/.gitignore +0 -0
  24. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/CLAUDE.md +0 -0
  25. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/GOAL.md +0 -0
  26. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/LICENSE +0 -0
  27. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/MANIFEST.in +0 -0
  28. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/README.md +0 -0
  29. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/SOURCES.txt +0 -0
  30. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/dependency_links.txt +0 -0
  31. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/entry_points.txt +0 -0
  32. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/requires.txt +0 -0
  33. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/scm_file_list.json +0 -0
  34. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/code_coordinator.egg-info/top_level.txt +0 -0
  35. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/__init__.py +0 -0
  36. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/_board_mapping.py +0 -0
  37. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/acceptance.py +0 -0
  38. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/acceptance_drivers.py +0 -0
  39. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agent.py +0 -0
  40. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agent_app.py +0 -0
  41. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agent_update.py +0 -0
  42. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agents/opencode/.gitignore +0 -0
  43. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agents/opencode/agents/work.md +0 -0
  44. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/agents/opencode/routing.jsonc +0 -0
  45. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/approved_work.py +0 -0
  46. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/audit.py +0 -0
  47. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/auto_loop.py +0 -0
  48. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/backup.py +0 -0
  49. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/board_schema.py +0 -0
  51. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/board_service.py +0 -0
  52. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/board_wire.py +0 -0
  53. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/brain.py +0 -0
  54. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/branch_model.py +0 -0
  55. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/bug_intake.py +0 -0
  56. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/cargo_cache.py +0 -0
  57. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_fix.py +0 -0
  58. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_github.py +0 -0
  59. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_gitlab.py +0 -0
  60. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/ci_store.py +0 -0
  61. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/claim.py +0 -0
  62. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/claude_setup_token.py +0 -0
  63. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/client.py +0 -0
  65. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/codegen.py +0 -0
  66. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/__init__.py +0 -0
  67. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/_common.py +0 -0
  68. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/acceptance.py +0 -0
  69. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/agent_ops.py +0 -0
  70. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/audit.py +0 -0
  71. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/backup.py +0 -0
  72. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/chat.py +0 -0
  73. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/codegen.py +0 -0
  74. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/dispatch.py +0 -0
  75. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/dispatch_workers.py +0 -0
  76. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/dr.py +0 -0
  77. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/drive.py +0 -0
  78. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/gate_a.py +0 -0
  79. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/gates.py +0 -0
  80. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/issues.py +0 -0
  81. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/lifecycle.py +0 -0
  82. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/machine.py +0 -0
  83. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/merge.py +0 -0
  84. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/milestone.py +0 -0
  85. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/plan_followup.py +0 -0
  86. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/plans.py +0 -0
  87. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/portal.py +0 -0
  88. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/pr.py +0 -0
  89. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/release.py +0 -0
  90. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/repo.py +0 -0
  91. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/report.py +0 -0
  92. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/review.py +0 -0
  93. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/scorecard.py +0 -0
  94. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/sessions.py +0 -0
  95. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/setup.py +0 -0
  96. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/status.py +0 -0
  97. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/store_migrate.py +0 -0
  98. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/terminal.py +0 -0
  99. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/test_gate.py +0 -0
  100. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/commands/tui.py +0 -0
  101. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/comments.py +0 -0
  102. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/config.py +0 -0
  103. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/config_reload.py +0 -0
  104. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/confirm_test.py +0 -0
  105. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/conflict_fix.py +0 -0
  106. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dao.py +0 -0
  107. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/__init__.py +0 -0
  108. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/fixture.py +0 -0
  109. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/index.html +0 -0
  110. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/server.py +0 -0
  111. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dashboard/terminal.py +0 -0
  112. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dead_end.py +0 -0
  113. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/decomposition_chat.py +0 -0
  114. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/README.md +0 -0
  115. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-agent.service +0 -0
  116. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-backup.service +0 -0
  117. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-backup.timer +0 -0
  118. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-db-backup.service +0 -0
  119. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-db-backup.sh +0 -0
  120. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-db-backup.timer +0 -0
  121. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-dr-verify.service +0 -0
  122. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-dr-verify.timer +0 -0
  123. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-drive-queue.service +0 -0
  124. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-drive-queue.timer +0 -0
  125. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-failure-notify.service +0 -0
  126. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-fleet-watchdog.service +0 -0
  127. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  128. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-notify.service +0 -0
  129. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-notify.timer +0 -0
  130. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-propagate.service +0 -0
  131. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-propagate.timer +0 -0
  132. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-window.service +0 -0
  133. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-release-window.timer +0 -0
  134. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-serve.service +0 -0
  135. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-web-dist-build.service +0 -0
  136. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-web-dist-build.timer +0 -0
  137. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy/coord-web.service +0 -0
  138. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy_manifest.py +0 -0
  139. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deploy_units.py +0 -0
  140. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deprecation_telemetry.py +0 -0
  141. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/deps.py +0 -0
  142. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/diagnose.py +0 -0
  143. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dispatch.py +0 -0
  144. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dispatch_liveness.py +0 -0
  145. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dist_name.py +0 -0
  146. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dr_promote.py +0 -0
  147. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/dr_verify.py +0 -0
  148. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/drive.py +0 -0
  149. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/drive_queue.py +0 -0
  150. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/drive_state.py +0 -0
  151. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/events.py +0 -0
  152. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/failure_class.py +0 -0
  153. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/failure_classifier.py +0 -0
  154. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/filelock.py +0 -0
  155. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/fleet_config_health.py +0 -0
  156. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/forge_availability.py +0 -0
  157. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/freshness.py +0 -0
  158. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gate_a.py +0 -0
  159. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gate_b.py +0 -0
  160. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gate_snapshot.py +0 -0
  161. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gates.py +0 -0
  162. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/gen_board_fixture.py +0 -0
  163. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/github_ops.py +0 -0
  164. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/github_throttle.py +0 -0
  165. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/goal.py +0 -0
  166. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/graph_health.py +0 -0
  167. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/__init__.py +0 -0
  168. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/aggregate.py +0 -0
  169. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/__init__.py +0 -0
  170. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/_ci_pin.py +0 -0
  171. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/agent_install.py +0 -0
  172. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/cargo_targets.py +0 -0
  173. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/claude_binary.py +0 -0
  174. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/config_drift.py +0 -0
  175. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  176. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/coord_web_ci_pin.py +0 -0
  177. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/deploy_lane_facts.py +0 -0
  178. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/disk.py +0 -0
  179. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_board.py +0 -0
  180. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  181. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_phantom.py +0 -0
  182. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/fleet_unit_drift.py +0 -0
  183. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/graph.py +0 -0
  184. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/graphify_cli.py +0 -0
  185. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/index_lock.py +0 -0
  186. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/issues_sync_staleness.py +0 -0
  187. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/plan_usage.py +0 -0
  188. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/pr_churn.py +0 -0
  189. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/release_cordon.py +0 -0
  190. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/repo_state.py +0 -0
  191. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/spawned_coord.py +0 -0
  192. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/stalled_pipeline.py +0 -0
  193. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/timer_active.py +0 -0
  194. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/toolchain.py +0 -0
  195. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/unit_drift.py +0 -0
  196. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/unit_enablement.py +0 -0
  197. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/wedged_drive_queue.py +0 -0
  198. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/checks/worktrees.py +0 -0
  199. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/cli.py +0 -0
  200. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/context.py +0 -0
  201. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/fleet_snapshot.py +0 -0
  202. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/models.py +0 -0
  203. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/pypi.py +0 -0
  204. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/registry.py +0 -0
  205. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/render.py +0 -0
  206. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/health/units.py +0 -0
  207. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/hooks.py +0 -0
  208. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/housekeeping.py +0 -0
  209. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/interactive.py +0 -0
  210. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/invariant_alarms.py +0 -0
  211. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/issue_store.py +0 -0
  212. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/issues_sync_status.py +0 -0
  213. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/liveness_auditor.py +0 -0
  214. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_fault.py +0 -0
  215. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_metrics.py +0 -0
  216. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_onboard.py +0 -0
  217. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_pause.py +0 -0
  218. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/machine_stats.py +0 -0
  219. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_chat.py +0 -0
  220. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_dispatch.py +0 -0
  221. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_gate.py +0 -0
  222. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/milestone_order.py +0 -0
  223. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/mock_author.py +0 -0
  224. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/models.py +0 -0
  225. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/network.py +0 -0
  226. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/new_issue_chat.py +0 -0
  227. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/__init__.py +0 -0
  228. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/baseline.py +0 -0
  229. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/cli.py +0 -0
  230. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/collect.py +0 -0
  231. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/digest.py +0 -0
  232. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/models.py +0 -0
  233. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/predicate.py +0 -0
  234. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/service.py +0 -0
  235. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/store.py +0 -0
  236. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notifier/transport.py +0 -0
  237. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/notify.py +0 -0
  238. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/openapi.py +0 -0
  239. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/overlap_fence.py +0 -0
  240. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/overlap_predict.py +0 -0
  241. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/parentage.py +0 -0
  242. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/parentage_github.py +0 -0
  243. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/pipeline.py +0 -0
  244. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/plan_parser.py +0 -0
  245. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/plans.py +0 -0
  246. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/platform_paths.py +0 -0
  247. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/portal_bridge.py +0 -0
  248. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/portal_store.py +0 -0
  249. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/portal_sync.py +0 -0
  250. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/pr_body_lint.py +0 -0
  251. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/prereqs.py +0 -0
  252. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/progress.py +0 -0
  253. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/__init__.py +0 -0
  254. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/base.py +0 -0
  255. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/claude.py +0 -0
  256. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/claude_pty.py +0 -0
  257. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/providers/opencode.py +0 -0
  258. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/queue_diagnose.py +0 -0
  259. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/reconcile.py +0 -0
  260. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/reconcile_tick.py +0 -0
  261. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/refine_chat.py +0 -0
  262. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_cordon.py +0 -0
  263. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_propagate.py +0 -0
  264. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_verify.py +0 -0
  265. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/release_window.py +0 -0
  266. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/repo_dormancy.py +0 -0
  267. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/repo_edit.py +0 -0
  268. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/repo_onboard.py +0 -0
  269. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/reports.py +0 -0
  270. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/rest_schema.py +0 -0
  271. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/revalidate.py +0 -0
  272. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/review.py +0 -0
  273. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/scorecard.py +0 -0
  274. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/self_health.py +0 -0
  275. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/serve_app.py +0 -0
  276. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  277. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  278. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  279. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  280. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  281. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/portal-followup/SKILL.md +0 -0
  282. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/release-now/SKILL.md +0 -0
  283. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  284. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  285. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/skills/update-issue/SKILL.md +0 -0
  286. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/smoke.py +0 -0
  287. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/spend_ceiling.py +0 -0
  288. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/split_work.py +0 -0
  289. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/sql.py +0 -0
  290. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/stage_projection.py +0 -0
  291. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/store_migrate.py +0 -0
  292. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/store_parity.py +0 -0
  293. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/templates/deploy-cloudflare.node.yml +0 -0
  294. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_author.py +0 -0
  295. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_chat.py +0 -0
  296. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_orchestrator.py +0 -0
  297. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/test_report.py +0 -0
  298. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/tui_release.py +0 -0
  299. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/uat_checks.py +0 -0
  300. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/usage.py +0 -0
  301. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/usage_limits.py +0 -0
  302. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/usage_rollup.py +0 -0
  303. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coord/worker_events.py +0 -0
  304. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/coordinator.example.yml +0 -0
  305. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-agent.service +0 -0
  306. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-backup.service +0 -0
  307. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-backup.timer +0 -0
  308. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-db-backup.service +0 -0
  309. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-db-backup.sh +0 -0
  310. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-db-backup.timer +0 -0
  311. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-dr-verify.service +0 -0
  312. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-dr-verify.timer +0 -0
  313. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-drive-queue.service +0 -0
  314. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-drive-queue.timer +0 -0
  315. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-failure-notify.service +0 -0
  316. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-failure-notify.sh +0 -0
  317. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-fleet-watchdog.service +0 -0
  318. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-fleet-watchdog.timer +0 -0
  319. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-notify.service +0 -0
  320. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-notify.timer +0 -0
  321. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-propagate.service +0 -0
  322. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-propagate.timer +0 -0
  323. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-window.service +0 -0
  324. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-release-window.timer +0 -0
  325. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-serve.service +0 -0
  326. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-dist-build.service +0 -0
  327. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-dist-build.sh +0 -0
  328. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-dist-build.timer +0 -0
  329. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web-rollback.sh +0 -0
  330. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/coord-web.service +0 -0
  331. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/deploy/node-shim.sh +0 -0
  332. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_TUI_CI.md +0 -0
  333. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  334. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_WEB_CI.md +0 -0
  335. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_COORD_WEB_DIST.md +0 -0
  336. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  337. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/AGENT_OPERATIONS.md +0 -0
  338. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ARCHITECTURE.md +0 -0
  339. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ARCH_SECURITY_GATES.md +0 -0
  340. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/COCKPIT.md +0 -0
  341. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CONTROL_CENTER.md +0 -0
  342. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/COST_DISCIPLINE.md +0 -0
  343. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CROSS_PLATFORM.md +0 -0
  344. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CUSTOMER_FACING_APPS.md +0 -0
  345. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/CUSTOMER_PORTAL.md +0 -0
  346. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/DATA_STORE_SELECTION.md +0 -0
  347. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/DISASTER_RECOVERY.md +0 -0
  348. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/DRIVE_QUEUE.md +0 -0
  349. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/EPHEMERAL_WORKERS.md +0 -0
  350. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/FORGE_MIGRATION.md +0 -0
  351. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/GRAPHIFY_SETUP.md +0 -0
  352. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ISSUE_GUIDANCE.md +0 -0
  353. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/MAC_MINI.md +0 -0
  354. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  355. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/NOTIFIER.md +0 -0
  356. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/OPENCODE_VERIFICATION.md +0 -0
  357. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/OPERATING_GOTCHAS.md +0 -0
  358. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/OPERATOR_GUIDES.md +0 -0
  359. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/ORACLE_LOOP.md +0 -0
  360. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/PHONE_WEBAPP.md +0 -0
  361. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/PIPELINE_V2.md +0 -0
  362. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/PLATFORM_EVOLUTION.md +0 -0
  363. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/SECOND_BACKEND.md +0 -0
  364. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/STORE_SERVICE.md +0 -0
  365. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  366. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/WEB_CONTROL_CENTER.md +0 -0
  367. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/WSL_WINDOWS_WORKER.md +0 -0
  368. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/README.md +0 -0
  369. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/_tokens.css +0 -0
  370. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/issue-detail.html +0 -0
  371. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/pipeline-narrow.html +0 -0
  372. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/docs/mocks/web/pipeline-wide.html +0 -0
  373. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/graphify-out/.gitignore +0 -0
  374. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/install-agent.sh +0 -0
  375. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/pyproject.toml +0 -0
  376. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/audit_review_verdict_overrides.py +0 -0
  377. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  378. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/build-worker-image.sh +0 -0
  379. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/coordinator-machine.py +0 -0
  380. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/dr-down.sh +0 -0
  381. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/dr-up.sh +0 -0
  382. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/epic-down.sh +0 -0
  383. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/epic-up.sh +0 -0
  384. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/preflight.sh +0 -0
  385. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/provision-server.sh +0 -0
  386. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/provision-worker.sh +0 -0
  387. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  388. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  389. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/throwaway-vm.sh +0 -0
  390. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/azure-workers/verify-github-token.sh +0 -0
  391. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/check_gh_argv_containment.py +0 -0
  392. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/codegen.py +0 -0
  393. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-test-runner.sh +0 -0
  394. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  395. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  396. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  397. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  398. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/coord-venv-rollback.sh +0 -0
  399. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/drive-batch.sh +0 -0
  400. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/extract-coord-tui.sh +0 -0
  401. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/fleet_watchdog.py +0 -0
  402. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/gen_board_fixture.py +0 -0
  403. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/gen_mock_index.py +0 -0
  404. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/lib/provision-core.sh +0 -0
  405. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/next_release_tag.py +0 -0
  406. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/provision-machine.sh +0 -0
  407. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/run_tests_in_populated_home.sh +0 -0
  408. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/run_tests_without_gh.sh +0 -0
  409. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/setup-macmini.sh +0 -0
  410. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/smoke_437_interactive.py +0 -0
  411. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify-provision-noble.sh +0 -0
  412. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify_878_review_capture.py +0 -0
  413. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify_release_published.py +0 -0
  414. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/scripts/verify_release_wheel.py +0 -0
  415. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/setup.cfg +0 -0
  416. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/SMOKE_SET.md +0 -0
  417. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/__init__.py +0 -0
  418. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/conftest.py +0 -0
  419. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/contract.md +0 -0
  420. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/manifest.yml +0 -0
  421. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  422. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  423. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/contract.md +0 -0
  424. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  425. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  426. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/manifest.yml +0 -0
  427. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  428. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-51/tsconfig.json +0 -0
  429. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  430. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/backends.py +0 -0
  431. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/conftest.py +0 -0
  432. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/board-pipeline-basic.json +0 -0
  433. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  434. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  435. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  436. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  437. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/all_pass.json +0 -0
  438. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  439. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/mixed_fail.json +0 -0
  440. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  441. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  442. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/skip.json +0 -0
  443. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/playwright/truncated.json +0 -0
  444. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  445. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  446. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  447. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  448. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  449. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  450. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  451. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  452. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_acceptance.py +0 -0
  453. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_acceptance_drivers.py +0 -0
  454. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent.py +0 -0
  455. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_api_error.py +0 -0
  456. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_app.py +0 -0
  457. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_branch_base.py +0 -0
  458. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_branch_capture.py +0 -0
  459. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_config_free_1712.py +0 -0
  460. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_deploy_units_endpoint.py +0 -0
  461. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_dirty_worktree.py +0 -0
  462. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  463. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_graph_self_heal.py +0 -0
  464. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_health_h3.py +0 -0
  465. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_idle_restart.py +0 -0
  466. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_push_failure.py +0 -0
  467. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_reap.py +0 -0
  468. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_repos_and_pull.py +0 -0
  469. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_restart_services_endpoint.py +0 -0
  470. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_skills_self_heal.py +0 -0
  471. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_startup_diagnostics.py +0 -0
  472. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_update.py +0 -0
  473. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_update_bluegreen.py +0 -0
  474. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_usage_limit.py +0 -0
  475. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_agent_zero_commit.py +0 -0
  476. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ambient_home_isolation.py +0 -0
  477. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_capability_reroute_3241.py +0 -0
  478. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_dependency_busy_2804.py +0 -0
  479. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_reject_plan.py +0 -0
  480. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approve_usage_gate.py +0 -0
  481. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approved_work_2532.py +0 -0
  482. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_approved_work_2996.py +0 -0
  483. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_assignment_already_recorded_daemon.py +0 -0
  484. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_audit_log.py +0 -0
  485. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_audit_outcome.py +0 -0
  486. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_audit_query.py +0 -0
  487. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_auto_loop.py +0 -0
  488. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_auto_release_publish_2035.py +0 -0
  489. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_backend_selection.py +0 -0
  490. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_backup.py +0 -0
  491. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_base_checkout_restore.py +0 -0
  492. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_block_log.py +0 -0
  493. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_cap_762.py +0 -0
  494. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_fixture.py +0 -0
  495. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_read_path.py +0 -0
  496. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_schema.py +0 -0
  497. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_service.py +0 -0
  498. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_state.py +0 -0
  499. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_board_wire.py +0 -0
  500. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_brain.py +0 -0
  501. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_branch_model.py +0 -0
  502. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_bug_intake.py +0 -0
  503. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_build_worker_image_env_update.py +0 -0
  504. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cargo_cache.py +0 -0
  505. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_check_gh_argv_containment.py +0 -0
  506. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_acceptance_gate_1950.py +0 -0
  507. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_fix.py +0 -0
  508. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_github.py +0 -0
  509. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_gitlab.py +0 -0
  510. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_parity_2091.py +0 -0
  511. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_ci_store.py +0 -0
  512. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_claim.py +0 -0
  513. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_claude_md_budget.py +0 -0
  514. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_claude_setup_token.py +0 -0
  515. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_acceptance.py +0 -0
  516. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign.py +0 -0
  517. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  518. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_interactive_remote.py +0 -0
  519. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_provider.py +0 -0
  520. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  521. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_audit.py +0 -0
  522. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_chat_continue.py +0 -0
  523. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_codegen.py +0 -0
  524. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_decide.py +0 -0
  525. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_capability_rules.py +0 -0
  526. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_config_provenance.py +0 -0
  527. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_forge_availability.py +0 -0
  528. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_graph.py +0 -0
  529. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_self.py +0 -0
  530. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_diagnose_test_coverage.py +0 -0
  531. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor.py +0 -0
  532. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor_config_free_1801.py +0 -0
  533. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  534. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  535. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_drive.py +0 -0
  536. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_escalate.py +0 -0
  537. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_fix_headless_review.py +0 -0
  538. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_gate_a.py +0 -0
  539. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_install_drift.py +0 -0
  540. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_install_skills.py +0 -0
  541. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_comment.py +0 -0
  542. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_create_label.py +0 -0
  543. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_reopen.py +0 -0
  544. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_issue_view_list.py +0 -0
  545. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_merge.py +0 -0
  546. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_assign.py +0 -0
  547. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_capture.py +0 -0
  548. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_chat_add_child.py +0 -0
  549. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_dispatch.py +0 -0
  550. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_gate_b.py +0 -0
  551. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_gate_c.py +0 -0
  552. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_order.py +0 -0
  553. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  554. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_milestone_ship.py +0 -0
  555. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_network.py +0 -0
  556. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_new_issue_chat.py +0 -0
  557. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_plans.py +0 -0
  558. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_portal.py +0 -0
  559. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_pr.py +0 -0
  560. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_pull_artifact.py +0 -0
  561. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_queue.py +0 -0
  562. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_reattach_sessions.py +0 -0
  563. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_refine_board.py +0 -0
  564. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_release_preflight.py +0 -0
  565. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_release_propagate.py +0 -0
  566. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_release_window.py +0 -0
  567. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_repo_2220.py +0 -0
  568. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  569. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_scorecard.py +0 -0
  570. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_serve_store_backend_3084.py +0 -0
  571. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_set_review_findings.py +0 -0
  572. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_advisory_terminal.py +0 -0
  573. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_contested_tag.py +0 -0
  574. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_invariant_alarms.py +0 -0
  575. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_machine_fault.py +0 -0
  576. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_merge_queue.py +0 -0
  577. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_provider.py +0 -0
  578. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_retried_3340.py +0 -0
  579. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_review_finalizing.py +0 -0
  580. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_test_failed_tag.py +0 -0
  581. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_status_usage_limit.py +0 -0
  582. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_sync_comments_873.py +0 -0
  583. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_test_plan.py +0 -0
  584. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_track.py +0 -0
  585. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_tui_update.py +0 -0
  586. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cli_wait.py +0 -0
  587. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client.py +0 -0
  588. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client_base_install.py +0 -0
  589. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client_config_cache_atomic_3052.py +0 -0
  590. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_client_resource_migration_1946.py +0 -0
  591. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_commands_common.py +0 -0
  592. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_comments.py +0 -0
  593. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_completion_summary.py +0 -0
  594. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config.py +0 -0
  595. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_acceptance.py +0 -0
  596. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_audit.py +0 -0
  597. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_drift_check.py +0 -0
  598. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_pricing.py +0 -0
  599. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  600. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_config_usage_gate.py +0 -0
  601. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_confirm_test.py +0 -0
  602. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_conflict_fix.py +0 -0
  603. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_conflict_fix_semantic.py +0 -0
  604. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  605. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test.py +0 -0
  606. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  607. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_baseline.py +0 -0
  608. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_populated_home.py +0 -0
  609. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_routing.py +0 -0
  610. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_test_runner_toolchain.py +0 -0
  611. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_uat.py +0 -0
  612. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coord_web_sse_restart_live.py +0 -0
  613. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_coordinator_machine.py +0 -0
  614. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_cross_platform_imports.py +0 -0
  615. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dao.py +0 -0
  616. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard.py +0 -0
  617. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_api.py +0 -0
  618. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_fixture.py +0 -0
  619. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_server.py +0 -0
  620. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_terminal.py +0 -0
  621. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dashboard_terminal_live.py +0 -0
  622. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dead_end.py +0 -0
  623. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_decomposition_chat.py +0 -0
  624. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_coord_db_backup.py +0 -0
  625. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_coord_web_dist.py +0 -0
  626. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_coord_web_rollback.py +0 -0
  627. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_db_backup_unit.py +0 -0
  628. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_drive_queue_unit.py +0 -0
  629. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_failure_notify_unit.py +0 -0
  630. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_manifest.py +0 -0
  631. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_notify_unit.py +0 -0
  632. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_units_lane.py +0 -0
  633. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deploy_web_unit.py +0 -0
  634. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deprecation_telemetry.py +0 -0
  635. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_deps.py +0 -0
  636. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_diagnose.py +0 -0
  637. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch.py +0 -0
  638. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch_liveness.py +0 -0
  639. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch_target_validation.py +0 -0
  640. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dispatch_workers.py +0 -0
  641. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dist_name.py +0 -0
  642. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_done_housekeeping.py +0 -0
  643. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dr_azure_scripts.py +0 -0
  644. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dr_promote.py +0 -0
  645. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_dr_verify.py +0 -0
  646. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive.py +0 -0
  647. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_machine_fault.py +0 -0
  648. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue.py +0 -0
  649. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_blocked_rendering.py +0 -0
  650. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_launch_argv.py +0 -0
  651. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  652. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_roll_pending.py +0 -0
  653. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  654. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_state.py +0 -0
  655. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_drive_tmux.py +0 -0
  656. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_epic_up_capability_detection.py +0 -0
  657. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  658. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_epic_up_image_provenance.py +0 -0
  659. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_errors.py +0 -0
  660. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_events.py +0 -0
  661. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_failure_class.py +0 -0
  662. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_failure_classifier.py +0 -0
  663. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_filelock.py +0 -0
  664. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  665. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fix_escalation_classifier.py +0 -0
  666. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fix_of_force_override.py +0 -0
  667. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_config_health.py +0 -0
  668. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_health_probes.py +0 -0
  669. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_health_snapshot.py +0 -0
  670. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_fleet_watchdog.py +0 -0
  671. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_forge_availability.py +0 -0
  672. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_freshness.py +0 -0
  673. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gate_a.py +0 -0
  674. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gate_b.py +0 -0
  675. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gate_snapshot_staleness.py +0 -0
  676. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gates.py +0 -0
  677. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  678. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_gen_mock_index.py +0 -0
  679. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_generated_rust_fixture.py +0 -0
  680. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_generated_rust_requests.py +0 -0
  681. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_generated_types_fixture.py +0 -0
  682. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_github_ops.py +0 -0
  683. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_github_throttle.py +0 -0
  684. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_goal.py +0 -0
  685. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_graph_health.py +0 -0
  686. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_graph_selfheal_absent_2237.py +0 -0
  687. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_handoff.py +0 -0
  688. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_checks.py +0 -0
  689. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_cli.py +0 -0
  690. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_cli_graph.py +0 -0
  691. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_config.py +0 -0
  692. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_context.py +0 -0
  693. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_coord_tui_ci_pin.py +0 -0
  694. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_coord_web_ci_pin.py +0 -0
  695. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_deploy_lane_facts.py +0 -0
  696. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_fix.py +0 -0
  697. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_incident_regression.py +0 -0
  698. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_issues_sync_staleness.py +0 -0
  699. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_pr_churn.py +0 -0
  700. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_pypi.py +0 -0
  701. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_registry.py +0 -0
  702. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_release_cordon_probe.py +0 -0
  703. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_timer_active.py +0 -0
  704. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_toolchain.py +0 -0
  705. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_unit_drift.py +0 -0
  706. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_unit_enablement.py +0 -0
  707. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_health_wedged_drive_queue.py +0 -0
  708. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_hooks.py +0 -0
  709. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_housekeeping.py +0 -0
  710. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_human_attended_437.py +0 -0
  711. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_init.py +0 -0
  712. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_install_agent_venv_2911.py +0 -0
  713. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_integration.py +0 -0
  714. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_briefing_echo.py +0 -0
  715. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_pane_log_2541.py +0 -0
  716. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_prefill_state.py +0 -0
  717. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_session_relaunch.py +0 -0
  718. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_test_verdict_backstop.py +0 -0
  719. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_token_attribution.py +0 -0
  720. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_interactive_worktree.py +0 -0
  721. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_invariant_alarms.py +0 -0
  722. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_issue_store_seam.py +0 -0
  723. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_issues_sync_status.py +0 -0
  724. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_liveness_auditor.py +0 -0
  725. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_liveness_notify.py +0 -0
  726. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_lock_contention_ratchet.py +0 -0
  727. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_fault.py +0 -0
  728. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_metrics.py +0 -0
  729. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_onboard.py +0 -0
  730. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_pause.py +0 -0
  731. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_machine_stats.py +0 -0
  732. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_merge_queue.py +0 -0
  733. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_merge_verify.py +0 -0
  734. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_chat.py +0 -0
  735. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_dispatch.py +0 -0
  736. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_gate.py +0 -0
  737. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_order.py +0 -0
  738. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_milestone_seam.py +0 -0
  739. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_mock_author.py +0 -0
  740. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_model_tiering.py +0 -0
  741. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_models.py +0 -0
  742. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_models_config_labels.py +0 -0
  743. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_needs_attention.py +0 -0
  744. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_network.py +0 -0
  745. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_new_issue_chat.py +0 -0
  746. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_next_release_tag.py +0 -0
  747. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_node_shim.py +0 -0
  748. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_baseline.py +0 -0
  749. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_cli.py +0 -0
  750. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_collect.py +0 -0
  751. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_config.py +0 -0
  752. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_drive_seam.py +0 -0
  753. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_isolation.py +0 -0
  754. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_predicate.py +0 -0
  755. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_quiet_hours.py +0 -0
  756. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notifier_service.py +0 -0
  757. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notify.py +0 -0
  758. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_notify_drain.py +0 -0
  759. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_openapi.py +0 -0
  760. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_operational_defaults.py +0 -0
  761. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_overlap_fence.py +0 -0
  762. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_overlap_predict.py +0 -0
  763. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_packaged_deploy_units.py +0 -0
  764. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_parentage.py +0 -0
  765. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_paste_landed.py +0 -0
  766. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  767. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_pipeline.py +0 -0
  768. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_followup_approve_plan_command.py +0 -0
  769. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_followup_pr_command.py +0 -0
  770. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_followup_review_command.py +0 -0
  771. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_only.py +0 -0
  772. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_plan_parser.py +0 -0
  773. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_platform_paths.py +0 -0
  774. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_bridge.py +0 -0
  775. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_config.py +0 -0
  776. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_store.py +0 -0
  777. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_portal_sync.py +0 -0
  778. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_pr_body_lint.py +0 -0
  779. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_prereqs.py +0 -0
  780. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_production_db_guard.py +0 -0
  781. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_progress.py +0 -0
  782. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_provider_seam.py +0 -0
  783. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_providers.py +0 -0
  784. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_providers_config_labels.py +0 -0
  785. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_providers_pty.py +0 -0
  786. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_provision_core.py +0 -0
  787. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_provision_machine.py +0 -0
  788. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_py_rust_mirror_inventory.py +0 -0
  789. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_quiet_hours.py +0 -0
  790. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_quiet_hours_store_2146.py +0 -0
  791. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reap_merged_sessions.py +0 -0
  792. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reap_stale_interactive_tick.py +0 -0
  793. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile.py +0 -0
  794. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_branch.py +0 -0
  795. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_completions.py +0 -0
  796. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  797. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_merges.py +0 -0
  798. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_no_agent_record.py +0 -0
  799. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_tick.py +0 -0
  800. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reconcile_usage_limit_done.py +0 -0
  801. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_refine_chat.py +0 -0
  802. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_2101.py +0 -0
  803. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  804. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_deadlock_2240.py +0 -0
  805. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  806. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_cordon_stuck_2490.py +0 -0
  807. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_propagate.py +0 -0
  808. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_propagate_threshold.py +0 -0
  809. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_roll_between_legs_2854.py +0 -0
  810. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_roll_window_handoff.py +0 -0
  811. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_unified_1242.py +0 -0
  812. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_verify.py +0 -0
  813. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_release_window.py +0 -0
  814. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_remote_auto_prune.py +0 -0
  815. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_remote_interactive_reaper.py +0 -0
  816. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_add.py +0 -0
  817. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_dormancy.py +0 -0
  818. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_edit_2220.py +0 -0
  819. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_graph_fleet_2237.py +0 -0
  820. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_repo_onboard_2220.py +0 -0
  821. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_report_result_push.py +0 -0
  822. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_reports.py +0 -0
  823. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry.py +0 -0
  824. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry_advisory_1606.py +0 -0
  825. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry_escalation_classify_3360.py +0 -0
  826. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_retry_type_1636.py +0 -0
  827. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_revalidate.py +0 -0
  828. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review.py +0 -0
  829. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_end_review_without_verdict.py +0 -0
  830. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_parse_failure_diagnostic.py +0 -0
  831. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_reaffirm.py +0 -0
  832. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_state.py +0 -0
  833. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_verdict_backstop.py +0 -0
  834. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_verdict_override_audit.py +0 -0
  835. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_verdict_relay.py +0 -0
  836. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_review_zero_commits.py +0 -0
  837. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_scoped_review_wiring.py +0 -0
  838. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_scorecard.py +0 -0
  839. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_self_health.py +0 -0
  840. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve.py +0 -0
  841. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve_app.py +0 -0
  842. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve_app_board_trim.py +0 -0
  843. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_serve_rest_routes.py +0 -0
  844. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_session.py +0 -0
  845. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_slice_issue_attribution.py +0 -0
  846. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke.py +0 -0
  847. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  848. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke_live_checkout_restore.py +0 -0
  849. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_smoke_workflow.py +0 -0
  850. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_spend_ceiling.py +0 -0
  851. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_spend_ceiling_coordinator.py +0 -0
  852. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_split.py +0 -0
  853. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_split_work.py +0 -0
  854. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_sql_dialect.py +0 -0
  855. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_sqlite_connect_ratchet.py +0 -0
  856. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stage_projection.py +0 -0
  857. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stale_busy_reviewer_697.py +0 -0
  858. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stalled_pipeline.py +0 -0
  859. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_state_review_findings_daemon.py +0 -0
  860. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_status_fleet_footer.py +0 -0
  861. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stop_1567.py +0 -0
  862. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_store_contract.py +0 -0
  863. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_store_migrate.py +0 -0
  864. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stuck.py +0 -0
  865. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  866. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_terminal_command.py +0 -0
  867. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_author.py +0 -0
  868. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_chat.py +0 -0
  869. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_orchestrator.py +0 -0
  870. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_report.py +0 -0
  871. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_verdict_parsing.py +0 -0
  872. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_test_verdict_transcript_floor.py +0 -0
  873. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_text_io_encoding_audit.py +0 -0
  874. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_thin_client_board_audit.py +0 -0
  875. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_thin_client_config_load_1080.py +0 -0
  876. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_thin_client_daemon_routing_906.py +0 -0
  877. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_throwaway_vm.py +0 -0
  878. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_tmux_host.py +0 -0
  879. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_tmux_session.py +0 -0
  880. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_uat_checks.py +0 -0
  882. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_usage.py +0 -0
  883. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_usage_limits.py +0 -0
  884. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_usage_rollup.py +0 -0
  885. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_venv_live_install_2121.py +0 -0
  886. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_version_single_source.py +0 -0
  887. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_watch.py +0 -0
  888. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  889. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_env_venv_isolation.py +0 -0
  890. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_events.py +0 -0
  891. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_image_pin_sync.py +0 -0
  892. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_safety.py +0 -0
  893. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worker_test_scoping.py +0 -0
  894. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worktree.py +0 -0
  895. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  896. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/test_write_parity.py +0 -0
  897. {code_coordinator-0.5.492 → code_coordinator-0.5.494}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.492
3
+ Version: 0.5.494
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.492
3
+ Version: 0.5.494
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.492",
2
+ "tag": "0.5.494",
3
3
  "distance": 0,
4
- "node": "gf825ecb0009197eb0b97ba8d836676c545ec6a00",
4
+ "node": "g52be7f1fb06c8a23aaf1d850192c29dc4cf8a36f",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-18"
@@ -124,6 +124,7 @@ from coord.overlap_predict import (
124
124
 
125
125
  if TYPE_CHECKING: # pragma: no cover — typing only
126
126
  from coord.config import Config
127
+ from coord.merge_queue import QueuedMerge
127
128
 
128
129
  log = logging.getLogger(__name__)
129
130
 
@@ -4740,14 +4741,51 @@ def _run_merge_only_candidates(plan: TickPlan, config_path: Path | None) -> None
4740
4741
  click.echo(f"merge-only: {reason}")
4741
4742
 
4742
4743
 
4744
+ # #3396: the `stage` this call site's escalations are recorded under —
4745
+ # mirrors `ROLL_PENDING_ALERT_STAGE`/`SELF_CORDON_ALERT_STAGE` above, but
4746
+ # keyed per-entry (the entry's own `(repo_name, issue_number)`) rather than a
4747
+ # single fleet-wide slot, since more than one branch can be `checks_stale` at
4748
+ # once. `_run_auto_revalidate_checks_stale`'s cleanup pass reads this same
4749
+ # constant back to find which open escalations are its own to dismiss.
4750
+ CHECKS_STALE_ALERT_STAGE = "checks_stale"
4751
+
4752
+
4753
+ def _record_checks_stale_escalation(entry: "QueuedMerge", *, reason: str) -> None:
4754
+ """Write (or refresh) the durable, human-visible escalation for *entry*
4755
+ (#3396 item 2) — ``coord escalate list``/``coord escalate run`` and the
4756
+ TUI already surface this table for every other "needs a human" condition
4757
+ in this file; a `checks_stale` block that this tick cannot move forward
4758
+ on its own now reaches it too, instead of only ever reprinting the same
4759
+ diagnosis to the journal every ~3 minutes forever.
4760
+
4761
+ Best-effort: a write failure here must not take down the rest of the
4762
+ tick — the caller already echoed the reason to stdout, which is the
4763
+ floor this falls back to.
4764
+ """
4765
+ try:
4766
+ from coord.state import record_drive_escalation # noqa: PLC0415
4767
+
4768
+ record_drive_escalation(
4769
+ entry.repo_name,
4770
+ entry.issue_number,
4771
+ stage=CHECKS_STALE_ALERT_STAGE,
4772
+ reason=reason,
4773
+ gate_readings=f"error={entry.error}" if entry.error else "gate: READY",
4774
+ proposed_command=(
4775
+ f"coord merge --only {entry.repo_name}#{entry.issue_number}"
4776
+ ),
4777
+ assignment_id=entry.assignment_id,
4778
+ )
4779
+ except Exception as exc: # noqa: BLE001 — the stdout line is the floor
4780
+ click.echo(f" (could not record the checks_stale escalation: {exc})")
4781
+
4782
+
4743
4783
  def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
4744
- """#2535: best-effort surfacing of merge-queue entries blocked SOLELY on
4784
+ """#2535: unattended remedy for merge-queue entries blocked SOLELY on
4745
4785
  stale CI checks against an already-approved review — closing the gap
4746
4786
  where nothing periodic ever looks at such an entry on an operator's
4747
- behalf, so it just sits until someone notices ``--dry-run``'s
4748
- ``checks_stale`` line by hand (the trigger: #2530's Gate-A PR #2534 sat
4749
- blocked 2026-08-21 on nothing but 210 unrelated merges having landed
4750
- since its CI last ran).
4787
+ behalf (the trigger: #2530's Gate-A PR #2534 sat blocked 2026-08-21 on
4788
+ nothing but 210 unrelated merges having landed since its CI last ran).
4751
4789
 
4752
4790
  #3266: this used to auto-fire a ``gh run rerun`` (``CiStore.
4753
4791
  rerun_for_pr``) for exactly this shape, up to ``MAX_CI_STALE_RERUNS`` —
@@ -4756,46 +4794,89 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
4756
4794
  there too: a ``gh run rerun`` replays the SAME event payload against
4757
4795
  the SAME base the stale checks already used, so it can never see a
4758
4796
  base that has since moved — which is the ONLY thing a staleness
4759
- reading means. Every tick that found a candidate here was spending a
4760
- full CI cycle (this repo's median: ~62 minutes) on a guaranteed no-op,
4761
- twice, before the shared ``ci_stale_reruns`` budget parked the entry
4762
- anyway (claude-coordinator#2972). Per this repo's "one question, one
4763
- answer" rule, this tick and ``process()`` must agree on the same
4764
- question ("should we auto-rerun CI for a checks_stale block?") — they
4765
- now both answer "no, park and point at a rebase" identically, rather
4766
- than this call site silently keeping the old answer #2197 already gave
4767
- up on live. See ``MAX_CI_STALE_RERUNS``'s comment in
4797
+ reading means. See ``MAX_CI_STALE_RERUNS``'s comment in
4768
4798
  ``coord/merge_queue.py`` and ``ci_stale_reason``'s docstring for the
4769
- full reasoning and the actual remedy (rebase onto the target branch,
4770
- then ``git push --force-with-lease`` — the only thing that produces a
4771
- check against the CURRENT base).
4799
+ full reasoning. The actual remedy is a rebase onto the target branch
4800
+ followed by ``git push --force-with-lease`` — the only thing that
4801
+ produces a check against the CURRENT base.
4802
+
4803
+ #3396: from #2535 through #3266 this call site only ever *reported*
4804
+ that remedy — it never performed it, so a `checks_stale` entry whose
4805
+ owning `coord drive` session had already exhausted its merge attempts
4806
+ and exited had NOTHING left watching it: this tick re-diagnosed the
4807
+ same block every ~3 minutes, forever, and the stale-rebase worker
4808
+ that exists for exactly this shape (:func:`coord.conflict_fix.
4809
+ dispatch_conflict_fix` with ``stale_rebase=True``, #3349) was never
4810
+ dispatched. #3349 already wired that worker into
4811
+ ``coord.notify``'s stalled-pipeline sweep (``merge_gate_checks_stale``),
4812
+ but that sweep only runs when ``coord notify`` is invoked and
4813
+ ``pipeline.auto_dispatch_stalled`` is on — it is not this tick, which
4814
+ runs unconditionally every few minutes on the daemon host. Per this
4815
+ repo's "one question, one answer" rule this call site now reuses the
4816
+ IDENTICAL dispatcher rather than re-deriving the decision: a
4817
+ content-preserving rebase gets force-pushed and the merge queue picks
4818
+ it up on its own next attempt, with no operator action, exactly like
4819
+ the #1090 reference case in the issue. A rebase that turns out to
4820
+ conflict (or change content) still refuses and escalates — the
4821
+ worker's own narrow briefing (:func:`coord.conflict_fix.
4822
+ build_stale_rebase_briefing`) enforces that, not this call site.
4823
+
4824
+ Escalation (#3396 item 2): a candidate this function cannot move
4825
+ forward — a conflict-fix already tried and failed against this SAME
4826
+ error (:func:`coord.conflict_fix.has_prior_conflict_fix`), or dispatch
4827
+ itself declined (no capable/reachable machine, no ``repo_path``) — is
4828
+ recorded via :func:`coord.state.record_drive_escalation` under the
4829
+ entry's OWN ``(repo, issue)``, the same durable, human-visible table
4830
+ ``coord escalate list``/``coord escalate run`` already serve for every
4831
+ other "needs a human" condition in this file (see
4832
+ ``ROLL_PENDING_ALERT_REPO``/``SELF_CORDON_ALERT_REPO`` above for the
4833
+ established one-slot-per-condition pattern; this one is naturally
4834
+ keyed per-entry instead, since more than one branch can be
4835
+ ``checks_stale`` at once). Before #3396 a block that "needs a human"
4836
+ only ever reached this function's own stdout/journal line, printed
4837
+ again unchanged every tick — never a place an operator or the TUI
4838
+ would actually see it (the issue's own complaint: `coord drive-queue
4839
+ status` reporting ``alert: (none)`` throughout). A candidate that
4840
+ clears on its own (the rebase lands, or the base stops moving) is no
4841
+ longer in the next tick's *candidates* list, so its escalation (if any)
4842
+ is dismissed below — the table only ever holds genuinely-live blocks.
4772
4843
 
4773
4844
  Deliberately narrow — this is NOT ``merge.auto_drain`` reopened (that
4774
4845
  flag stays ``False`` by design; see ``docs/DRIVE_QUEUE.md`` and the
4775
4846
  2026-06-07 incident it guards against). This step never merges
4776
- anything, never mutates the queue, and never touches an entry blocked
4777
- on review, a real CI failure, or a conflict — it only *reports* the
4778
- exact shape :func:`coord.merge_queue.ci_revalidation_candidates` scopes
4847
+ anything and never mutates the merge-queue row itself — it only ever
4848
+ dispatches the SAME bounded, self-refusing worker
4849
+ :func:`coord.conflict_fix.dispatch_conflict_fix` already provides
4850
+ for the identical shape reached from a live drive/stalled-pipeline
4851
+ sweep, gated by the SAME one-per-entry retry cap
4852
+ (:func:`coord.conflict_fix.has_prior_conflict_fix`) — so a second
4853
+ tick finding the same still-stale entry while a rebase attempt is
4854
+ already running/pending does nothing, and one that already failed
4855
+ escalates instead of retrying. It never touches an entry blocked on
4856
+ review, a real CI failure, or a conflict — only the exact shape
4857
+ :func:`coord.merge_queue.ci_revalidation_candidates` scopes
4779
4858
  ``--revalidate``'s (equally no-op) CI arm to (#1851/#1925): ``PENDING``,
4780
4859
  review approved, smoke fresh, CI checks green but predating the current
4781
4860
  base.
4782
4861
 
4783
4862
  ``MAX_CI_STALE_RERUNS``/``ci_stale_reruns`` are read nowhere in this
4784
- function any more — nothing here increments or checks that budget, so a
4785
- row already carrying a nonzero count from before this fix is left
4786
- exactly as ``process()`` leaves it (converges to 0 on the next
4787
- genuinely-fresh reading, never incremented further by this call site).
4788
-
4789
- Cost-visible (#1632's posture) in the opposite direction from before:
4790
- there is no external spend to report any more, only a
4791
- :func:`coord.audit.record_audit` (operational tier) row per candidate
4792
- per tick, so an operator watching the trail still sees the block
4793
- without this function ever burning a CI cycle trying (and failing) to
4794
- clear it.
4795
-
4796
- Deliberately NOT behind a new config flag — this is strictly a
4797
- supplementary read with no external action, so there is nothing new to
4798
- gate.
4863
+ function — nothing here increments or checks that budget, so a row
4864
+ already carrying a nonzero count from before #3266 is left exactly as
4865
+ ``process()`` leaves it (converges to 0 on the next genuinely-fresh
4866
+ reading, never incremented further by this call site).
4867
+
4868
+ Cost-visible (#1632's posture): dispatching a worker is real, visible
4869
+ spend — a :func:`coord.audit.record_audit` (business tier) row marks
4870
+ it, distinct from the operational-tier rows for a declined/escalated
4871
+ candidate, so an operator watching the audit trail can tell "this tick
4872
+ spent a session" from "this tick only reported a block" at a glance.
4873
+
4874
+ Deliberately NOT behind a new config flag — the worker it dispatches
4875
+ already carries its own bounded, self-refusing briefing and one-shot
4876
+ retry cap; there is nothing further to gate that
4877
+ ``pipeline.auto_dispatch_stalled`` (the flag guarding ``coord
4878
+ notify``'s unrelated, broader stalled-pipeline sweep) doesn't already
4879
+ cover for that other call site.
4799
4880
 
4800
4881
  Best-effort like every other optional step in this tick (conflict
4801
4882
  reconciliation in ``_auto_drain_tick``, the merge-only fast path above):
@@ -4803,6 +4884,24 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
4803
4884
  on a thin client — this daemon-host tick is the only place it ever
4804
4885
  runs, same guard :func:`_fetch_live_ci_gate`/
4805
4886
  :func:`_run_merge_only_candidates` use.
4887
+
4888
+ Known race, widened by this change (#3396 review): this tick is a new,
4889
+ independent, ALWAYS-ON caller of ``dispatch_conflict_fix(...,
4890
+ stale_rebase=True)`` (``deploy/coord-drive-queue.service``/``.timer``),
4891
+ alongside ``coord notify``'s stalled-pipeline sweep (a separate systemd
4892
+ timer, see ``docs/AGENT_OPERATIONS.md``) and a live drive's own merge
4893
+ attempt — three independent callers for the identical shape now. The
4894
+ shared guard (``has_prior_conflict_fix``/``_has_active_conflict_fix``)
4895
+ is a plain board-snapshot read with no cross-process lock between them:
4896
+ if two of these fire within the same window for the same gate-READY
4897
+ ``checks_stale`` entry, both can independently observe "no prior fix in
4898
+ flight" and dispatch a duplicate stale-rebase worker. Wasted spend, not
4899
+ data loss — the second worker's push is a no-op or is itself refused —
4900
+ but this is the first caller to fire unconditionally on a fixed timer
4901
+ rather than behind a live drive or an opt-in flag, which widens the
4902
+ window. A real fix needs a cross-process claim (e.g. a DB-level lock
4903
+ keyed on the entry) rather than a snapshot read; tracked as a follow-up,
4904
+ not fixed here.
4806
4905
  """
4807
4906
  from coord.board_service import resolve as resolve_board_service # noqa: PLC0415
4808
4907
 
@@ -4815,10 +4914,32 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
4815
4914
  from coord.audit import record_audit # noqa: PLC0415
4816
4915
  from coord.ci_store import build_ci_store # noqa: PLC0415
4817
4916
  from coord.commands._common import _load_config # noqa: PLC0415
4818
- from coord.state import load_board as _load_board # noqa: PLC0415
4917
+ from coord.conflict_fix import ( # noqa: PLC0415
4918
+ _has_active_conflict_fix,
4919
+ describe_conflict_fix_decline,
4920
+ dispatch_conflict_fix,
4921
+ has_prior_conflict_fix,
4922
+ )
4923
+ from coord.network import fetch_status # noqa: PLC0415
4924
+ from coord.state import ( # noqa: PLC0415
4925
+ dismiss_drive_escalation,
4926
+ list_drive_escalations,
4927
+ load_board as _load_board,
4928
+ )
4819
4929
 
4820
4930
  cfg = _load_config(config_path)
4821
- board = _load_board()
4931
+ # #3396: `load_board()` can legitimately return `None` (no board data
4932
+ # at all yet). `ci_revalidation_candidates` already tolerates that
4933
+ # (its gate reads never dereference a `None` board when the gate they
4934
+ # guard isn't required), but `has_prior_conflict_fix`/
4935
+ # `dispatch_conflict_fix` below unconditionally walk
4936
+ # `board.active`/`board.completed` — an empty board is the correct
4937
+ # "no prior assignments exist" reading for both, and keeps the two
4938
+ # calls sharing the exact same object rather than one seeing `None`
4939
+ # and the other a stand-in.
4940
+ from coord.models import Board # noqa: PLC0415
4941
+
4942
+ board = _load_board() or Board()
4822
4943
  ci_store = build_ci_store(
4823
4944
  cfg.ci_store.type, host=cfg.ci_store.host, token_env=cfg.ci_store.token_env,
4824
4945
  )
@@ -4829,34 +4950,145 @@ def _run_auto_revalidate_checks_stale(config_path: Path | None) -> None:
4829
4950
  except Exception: # noqa: BLE001 — best-effort, see docstring
4830
4951
  return
4831
4952
 
4953
+ # #3396 review: the cleanup pass below treats an escalation's absence
4954
+ # from *candidates* as "confirmed cleared" — that's only a safe reading
4955
+ # once we know `candidates` came from a REAL read, not from a
4956
+ # `ci_store` that was `None`/unavailable (which `ci_revalidation_
4957
+ # candidates` also answers with `[]`, indistinguishable by return value
4958
+ # alone from "genuinely nothing is stale"). The `ci_store.is_available`
4959
+ # check above, and the broader `except Exception: return` around this
4960
+ # whole block, both already `return` BEFORE this point on exactly that
4961
+ # ambiguous case — so reaching here at all already means the read was
4962
+ # real. Do not restructure this so cleanup can be reached without a
4963
+ # confirmed-available `ci_store` and a `ci_revalidation_candidates` call
4964
+ # that returned normally; that reintroduces the "unconfirmed success"
4965
+ # bug this comment describes (epic #2096: dismissing an escalation is
4966
+ # asserting "resolved" — only do it from an observation, not an
4967
+ # inability to look).
4968
+ #
4969
+ # #3396: drop any prior checks_stale escalation for an entry that is no
4970
+ # longer a candidate this tick — either it landed, or the base stopped
4971
+ # moving. Runs even when *candidates* is empty (that's the fully-healed
4972
+ # case). Best-effort: a read/write hiccup here must not stop the actual
4973
+ # dispatch loop below from running.
4974
+ try:
4975
+ live_keys = {(c.repo_name, c.issue_number) for c in candidates}
4976
+ for esc in list_drive_escalations():
4977
+ if esc.get("stage") != CHECKS_STALE_ALERT_STAGE:
4978
+ continue
4979
+ key = (esc.get("repo_name"), esc.get("issue_number"))
4980
+ if key not in live_keys:
4981
+ dismiss_drive_escalation(esc["repo_name"], esc["issue_number"])
4982
+ except Exception: # noqa: BLE001 — best-effort, see docstring
4983
+ pass
4984
+
4832
4985
  if not candidates:
4833
4986
  return
4834
4987
 
4835
4988
  for entry in candidates:
4836
4989
  label = f"{entry.repo_name} #{entry.issue_number} ({entry.branch})"
4837
- # #3266: no `gh run rerun` fires here any more — a same-base replay
4838
- # cannot clear a staleness reading, so this is visibility only, not
4839
- # a remedy attempt. See the docstring above and
4840
- # `coord.merge_queue.ci_stale_reason` for why.
4841
- click.echo(
4842
- f"auto-revalidate: {label} is checks_stale — a CI re-run cannot "
4843
- "clear it (same base); needs a rebase onto the target branch "
4844
- "and `git push --force-with-lease`, or a human running `coord "
4845
- "merge --only` after one"
4990
+
4991
+ if has_prior_conflict_fix(board, entry.assignment_id, current_error=entry.error):
4992
+ if _has_active_conflict_fix(board, entry.assignment_id):
4993
+ # A stale-rebase attempt is already running/pending for this
4994
+ # entry (dispatched by this same tick earlier, a live drive,
4995
+ # or the `coord notify` sweep) — nothing to do, and nothing
4996
+ # to escalate: it will resolve, or fail and escalate, on its
4997
+ # own.
4998
+ click.echo(
4999
+ f"auto-revalidate: {label} is checks_stale — a "
5000
+ "stale-rebase conflict-fix is already in flight for it"
5001
+ )
5002
+ continue
5003
+ # A prior stale-rebase (or ordinary conflict-fix) attempt for
5004
+ # this SAME error already failed — the retry cap is spent, and
5005
+ # re-diagnosing it every tick forever is exactly the #3396 bug.
5006
+ # Escalate once into the durable table instead of only echoing.
5007
+ reason = (
5008
+ f"{label} is checks_stale and a prior conflict-fix attempt "
5009
+ "already failed against this same block — a CI re-run "
5010
+ "cannot clear it (same base) and the automatic rebase "
5011
+ "already gave up; needs a human"
5012
+ )
5013
+ click.echo(f"auto-revalidate: {reason}")
5014
+ record_audit(
5015
+ tier="operational", category="merge",
5016
+ event_type="merge_checks_stale_human_required",
5017
+ actor="drive-queue-tick",
5018
+ summary=reason,
5019
+ repo=entry.repo_name, issue=entry.issue_number,
5020
+ assignment_id=entry.assignment_id,
5021
+ details={"pr_number": entry.pr_number, "error": entry.error},
5022
+ )
5023
+ _record_checks_stale_escalation(entry, reason=reason)
5024
+ continue
5025
+
5026
+ pick_out: list = []
5027
+ fix = dispatch_conflict_fix(
5028
+ entry, board, cfg, stale_rebase=True,
5029
+ status_fetcher=fetch_status, machine_pick_out=pick_out,
5030
+ )
5031
+ if fix is not None:
5032
+ click.echo(
5033
+ f"auto-revalidate: {label} is checks_stale — dispatched a "
5034
+ f"stale-rebase conflict-fix ({fix.assignment_id}) to "
5035
+ f"{fix.machine_name} (#3396: no live drive needed)"
5036
+ )
5037
+ record_audit(
5038
+ tier="business", category="merge",
5039
+ event_type="merge_checks_stale_auto_rebase_dispatched",
5040
+ actor="drive-queue-tick",
5041
+ summary=(
5042
+ f"stale-rebase conflict-fix dispatched: {label} → "
5043
+ f"{fix.machine_name}"
5044
+ ),
5045
+ repo=entry.repo_name, issue=entry.issue_number,
5046
+ assignment_id=fix.assignment_id,
5047
+ details={
5048
+ "pr_number": entry.pr_number,
5049
+ "merge_entry_id": entry.assignment_id,
5050
+ },
5051
+ )
5052
+ # #3396 review: an earlier tick may have already written a
5053
+ # `checks_stale` escalation for this SAME entry (dispatch
5054
+ # declined that time — no machine, no repo_path) before a later
5055
+ # tick found dispatch available and actually fired the worker.
5056
+ # Without this, `coord escalate list`/the TUI keep showing
5057
+ # "needs a human" for an entry that in fact now has a
5058
+ # stale-rebase worker actively running against it, until it
5059
+ # eventually drops out of `candidates` entirely. Best-effort —
5060
+ # a dismissal failure here must not undo the dispatch above.
5061
+ try:
5062
+ dismiss_drive_escalation(entry.repo_name, entry.issue_number)
5063
+ except Exception: # noqa: BLE001 — best-effort, see docstring
5064
+ pass
5065
+ continue
5066
+
5067
+ # Dispatch declined before ever starting a rebase — no capable or
5068
+ # reachable machine, no `repo_path` configured, or a flapping agent
5069
+ # (#3353). Still `checks_stale`, still gate-ready, and still nobody
5070
+ # is going to clear it on its own — surface it the same durable way
5071
+ # a genuine retry-cap exhaustion does, rather than a print-only line
5072
+ # nothing but the journal ever sees.
5073
+ decline_reason = describe_conflict_fix_decline(pick_out)
5074
+ reason = (
5075
+ f"{label} is checks_stale with a content-preserving rebase "
5076
+ f"expected to clear it, but dispatch declined: {decline_reason}"
4846
5077
  )
5078
+ click.echo(f"auto-revalidate: {reason}")
4847
5079
  record_audit(
4848
5080
  tier="operational", category="merge",
4849
5081
  event_type="merge_checks_stale_parked",
4850
5082
  actor="drive-queue-tick",
4851
5083
  summary=(
4852
5084
  f"checks_stale: {label} needs a rebase, not a CI re-run "
4853
- "(#3266) — a same-base `gh run rerun` can never clear "
4854
- "staleness"
5085
+ f"(#3266); auto-dispatch declined: {decline_reason} (#3396)"
4855
5086
  ),
4856
5087
  repo=entry.repo_name, issue=entry.issue_number,
4857
5088
  assignment_id=entry.assignment_id,
4858
- details={"pr_number": entry.pr_number},
5089
+ details={"pr_number": entry.pr_number, "decline_reason": decline_reason},
4859
5090
  )
5091
+ _record_checks_stale_escalation(entry, reason=reason)
4860
5092
 
4861
5093
 
4862
5094
  def _run_resume_probe(entry: QueueEntry) -> ProbeResult:
@@ -666,6 +666,129 @@ def rollback_after_driver_error(conn: Any | None, exc: BaseException) -> None:
666
666
  pass
667
667
 
668
668
 
669
+ def undo_pending_write(conn: Any | None, exc: BaseException, *, undo: Callable[[], Any]) -> None:
670
+ """Run *undo* — a compensating statement touching only THIS write's own
671
+ row — after *exc*, the #3382 sibling of
672
+ :func:`rollback_after_driver_error` for a writer whose own
673
+ ``conn.commit()`` call, not just the statement before it, can raise.
674
+
675
+ :func:`rollback_after_driver_error` deliberately no-ops for a plain
676
+ SQLite error (see its docstring): that is correct when the failure is a
677
+ STATEMENT that never got to write anything — SQLite's ``SQLITE_BUSY``,
678
+ hit while acquiring the lock a write needs, leaves nothing applied, so
679
+ simply re-running the whole write closure from scratch (what
680
+ :func:`retry_on_locked` does) is exactly as good as a rollback.
681
+
682
+ That reasoning does not hold when it is ``conn.commit()`` itself that
683
+ raises. WAL-checkpoint contention can make ``COMMIT`` hit
684
+ ``SQLITE_BUSY`` *after* the statement(s) before it already applied
685
+ inside the still-open transaction — the write is neither committed nor
686
+ undone, so it sits there, genuinely pending, on ``coord.db``'s shared
687
+ process-wide connection, ready for a completely unrelated handler's next
688
+ unrelated ``commit()`` to durably persist it later. #3382: this is
689
+ exactly how a ``review_claims`` row survived two callers who each saw
690
+ their own ``/review-claim`` POST fail with a 503 — neither call's own
691
+ retry-free write had anything guarding its ``commit()``, so the pending
692
+ insert outlived both failed calls and was swept up by a later,
693
+ completely unrelated write on the same shared connection.
694
+
695
+ A bare retry of the closure does not fix this the way it fixes a failed
696
+ statement, either: an ``INSERT OR IGNORE`` re-run against its own
697
+ still-pending prior insert reads back as a conflict (``rowcount == 0``),
698
+ so the retry silently misreports "someone else already holds this
699
+ claim" about a claim only this process's own earlier, abandoned attempt
700
+ took.
701
+
702
+ **Why a compensating statement, and not a transaction-level undo of any
703
+ kind (#3382 review rounds 1 and 2).** Two earlier shapes of this
704
+ function were both rejected, for the same underlying reason:
705
+
706
+ * ``conn.rollback()`` (round 1). On ``coord.db``'s shared, process-wide
707
+ SQLite singleton (see this module's own docstring), that discards
708
+ *every* other thread's not-yet-committed statement too — this process
709
+ dispatches other ``_*_local`` writers through ``run_in_threadpool`` on
710
+ real OS worker threads (the daemon's periodic tick, the ``/board``
711
+ build, ``/assignment/*`` handlers), and Python's ``sqlite3`` joins ANY
712
+ thread's statement issued on this one connection between commits into
713
+ the SAME open transaction. An unrelated writer that already got
714
+ ``sql.execute``/``sql.insert_ignore``'s success back (nothing in this
715
+ tree commits internally — see ``coord/sql.py``) then silently loses it
716
+ when its own later ``conn.commit()`` no-ops or raises ``cannot commit
717
+ - no transaction is active`` — this issue's own second logged symptom.
718
+
719
+ * ``SAVEPOINT`` + ``ROLLBACK TO SAVEPOINT`` (round 2), whether the
720
+ savepoint name is a shared literal or made unique per call. Unique
721
+ names fix only the narrower half of the problem (two concurrent calls
722
+ resolving each other's marker, since SQLite binds a name to the most
723
+ recently established savepoint of that name). They do **not** fix the
724
+ half that matters: ``ROLLBACK TO SAVEPOINT`` reverts the database to
725
+ its state *just after that savepoint was established*, so it undoes
726
+ every statement issued since — including another thread's, which this
727
+ writer has no business undoing — and destroys that thread's own
728
+ savepoints along the way. Verified against a real ``sqlite3``
729
+ connection (Python 3.12, SQLite 3.45): with two distinctly-named
730
+ savepoints opened back to back and one row inserted after each,
731
+ ``ROLLBACK TO`` the OUTER (uniquely-named) savepoint removes BOTH
732
+ rows. A transaction-scoped undo simply cannot express "mine only" on a
733
+ connection several threads write through.
734
+
735
+ So the undo is row-scoped instead: *undo* issues one statement that
736
+ names this write's own row and nothing else (delete the row this call
737
+ inserted, identified by its own ``claimed_at`` stamp; re-insert the row
738
+ this call deleted, with the ``claimed_at`` it read back first). It is
739
+ exact regardless of how other threads' statements interleave with this
740
+ one — before the failure or after it — because it never refers to their
741
+ rows.
742
+
743
+ It also degrades better than a transaction-level undo when an unrelated
744
+ thread's ``commit()`` lands *between* this write's statement and this
745
+ recovery: a savepoint would already have been destroyed by that commit
746
+ (``COMMIT`` releases all savepoints), leaving ``ROLLBACK TO`` to fail
747
+ and this write's row durably committed and leaked — precisely the
748
+ incident. The compensating statement instead stays pending and is
749
+ flushed by whichever ``commit()`` reaches it next (this closure's own
750
+ retry, or another writer's), so the net effect on this row is still
751
+ nothing.
752
+
753
+ Call this from the ``except sql.driver_errors():`` block of a write
754
+ closure that both executes a statement *and* calls ``conn.commit()``
755
+ itself, and **only when that closure's own statement actually applied**
756
+ (``cursor.rowcount``) — a statement that failed applied nothing, so
757
+ there is nothing to compensate, the same "a failed STATEMENT applies
758
+ nothing" reasoning :func:`rollback_after_driver_error` already
759
+ documents. Today's callers are the ``review_claims``/``smoke_claims``
760
+ claim and release writes in ``coord/state.py`` (#3113/#3333), the two
761
+ sites where "did this claim land" is an exclusive-ownership decision the
762
+ rest of the system relies on, unlike most of this module's writers where
763
+ a duplicate-on-retry UPDATE/DELETE is harmless.
764
+
765
+ Unlike :func:`rollback_after_driver_error`, this does not inspect *exc*
766
+ for a SQLSTATE: the plain-SQLite case above is exactly what it exists to
767
+ cover. On Postgres it is a harmless no-op in practice — a failed
768
+ ``COMMIT`` there aborts the whole transaction (so *undo* raises
769
+ ``InFailedSqlTransaction``, suppressed below) and
770
+ :func:`retry_on_locked`'s own :func:`rollback_after_driver_error` call
771
+ has already undone this write for real; ``get_connection()`` also hands
772
+ each THREAD its own connection there (see this module's docstring), so
773
+ no other thread's statement was ever at risk.
774
+
775
+ Same suppression rule as :func:`rollback_after_driver_error`: a ``None``
776
+ *conn* is a no-op, and a failure of *undo* itself is swallowed so it
777
+ never masks *exc*, the exception actually worth seeing. If the
778
+ compensating statement cannot run either (sustained contention
779
+ outlasting even this), this write's own row is left pending for the next
780
+ writer's eventual commit/rollback to resolve — the same residual,
781
+ already-accepted risk :func:`rollback_after_driver_error`'s own
782
+ suppressed-failure path carries today, not a new one.
783
+ """
784
+ if conn is None:
785
+ return
786
+ try:
787
+ undo()
788
+ except Exception: # noqa: BLE001 — never mask the caught driver error
789
+ pass
790
+
791
+
669
792
  # #2538: a handful of consecutive short retries — long enough to ride out a
670
793
  # concurrent writer (the daemon's own passive tick, another `coord merge`/
671
794
  # `coord notify` invocation) that only holds the DB for a moment, short
@@ -3724,16 +3724,24 @@ def ci_revalidation_candidates(
3724
3724
  `rerun_for_pr` replays the same run against the same base it already
3725
3725
  used, so it can never see the new one. `process()`'s OWN #2197
3726
3726
  auto-rerun for this trigger was dropped for that reason (see
3727
- `MAX_CI_STALE_RERUNS`'s comment), and `coord.commands.drive_queue
3728
- ._run_auto_revalidate_checks_stale` (the unattended periodic call site)
3729
- was fixed the same way in the same change — it still calls this
3730
- function to find the candidates, but only to report them, never to
3731
- rerun anything. The one remaining caller that still calls
3732
- `rerun_for_pr` on what this returns is `coord.commands.merge
3727
+ `MAX_CI_STALE_RERUNS`'s comment). The one remaining caller that still
3728
+ calls `rerun_for_pr` on what this returns is `coord.commands.merge
3733
3729
  ._apply_ci_revalidation` (the opt-in ``--revalidate`` CI arm) — equally
3734
3730
  unable to clear the block, but lower severity since a human has to
3735
3731
  explicitly ask for it. Left as-is here: fixing it is a change to that
3736
3732
  module, out of this function's/file's scope, and a tracked follow-up.
3733
+
3734
+ #3396: `coord.commands.drive_queue._run_auto_revalidate_checks_stale`
3735
+ (the unattended periodic call site) still calls this function to find
3736
+ the candidates, but no longer only to report them — a #3266-through-
3737
+ #3396 gap meant a `checks_stale` entry whose owning `coord drive`
3738
+ session had already exited was never seen by anything that could
3739
+ actually clear it, only re-diagnosed forever. That call site now
3740
+ dispatches the SAME bounded, self-refusing stale-rebase worker
3741
+ (:func:`coord.conflict_fix.dispatch_conflict_fix` with
3742
+ ``stale_rebase=True``) a live drive or `coord notify`'s stalled-pipeline
3743
+ sweep would already use for this exact shape — never a `gh run rerun`,
3744
+ which stays the known no-op described above.
3737
3745
  """
3738
3746
  if ci_store is None or not ci_store.is_available:
3739
3747
  return []