code-coordinator 0.5.518__tar.gz → 0.5.520__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 (910) hide show
  1. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/conflict_fix.py +44 -0
  5. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gates.py +214 -5
  6. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notify.py +15 -3
  7. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/reconcile.py +118 -22
  8. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_conflict_fix.py +147 -0
  9. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gates.py +208 -0
  10. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notify.py +78 -0
  11. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile.py +103 -4
  12. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.claude/commands/board.md +0 -0
  13. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.claude/commands/complete-session.md +0 -0
  14. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.claude/commands/coordinator.md +0 -0
  15. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/_lib.sh +0 -0
  16. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/post-checkout +0 -0
  17. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/post-commit +0 -0
  18. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.githooks/post-merge +0 -0
  19. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/coord-ci-acceptance.yml +0 -0
  21. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/workflows/auto-release.yml +0 -0
  22. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/workflows/publish.yml +0 -0
  23. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/.gitignore +0 -0
  25. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/GOAL.md +0 -0
  27. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/LICENSE +0 -0
  28. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/README.md +0 -0
  30. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/backup.py +0 -0
  50. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/block_log.py +0 -0
  51. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/board_schema.py +0 -0
  52. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_fix.py +0 -0
  59. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_gitlab.py +0 -0
  61. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/claude_setup_token.py +0 -0
  64. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/cli.py +0 -0
  65. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/client.py +0 -0
  66. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/codegen.py +0 -0
  67. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/__init__.py +0 -0
  68. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/_common.py +0 -0
  69. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/acceptance.py +0 -0
  70. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/agent_ops.py +0 -0
  71. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/audit.py +0 -0
  72. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/backup.py +0 -0
  73. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/chat.py +0 -0
  74. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/ci.py +0 -0
  75. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/codegen.py +0 -0
  76. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/dispatch.py +0 -0
  77. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/dispatch_workers.py +0 -0
  78. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/dr.py +0 -0
  79. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/drive.py +0 -0
  80. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/drive_queue.py +0 -0
  81. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/gate_a.py +0 -0
  82. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/gates.py +0 -0
  83. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/issues.py +0 -0
  84. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/lifecycle.py +0 -0
  85. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/machine.py +0 -0
  86. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/merge.py +0 -0
  87. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/milestone.py +0 -0
  88. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/plan_followup.py +0 -0
  89. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/plans.py +0 -0
  90. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/config.py +0 -0
  106. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dao.py +0 -0
  109. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/__init__.py +0 -0
  110. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/fixture.py +0 -0
  111. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/index.html +0 -0
  112. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/server.py +0 -0
  113. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dashboard/terminal.py +0 -0
  114. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/db.py +0 -0
  115. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dead_end.py +0 -0
  116. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/decomposition_chat.py +0 -0
  117. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/README.md +0 -0
  118. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-agent.service +0 -0
  119. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-backup.service +0 -0
  120. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-backup.timer +0 -0
  121. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-db-backup.service +0 -0
  122. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-db-backup.sh +0 -0
  123. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-db-backup.timer +0 -0
  124. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-dr-verify.service +0 -0
  125. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-dr-verify.timer +0 -0
  126. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-drive-queue.service +0 -0
  127. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-drive-queue.timer +0 -0
  128. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-failure-notify.service +0 -0
  129. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-fleet-watchdog.service +0 -0
  130. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  131. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-notify.service +0 -0
  132. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-notify.timer +0 -0
  133. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-propagate.service +0 -0
  134. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-propagate.timer +0 -0
  135. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-window.service +0 -0
  136. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-release-window.timer +0 -0
  137. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-serve.service +0 -0
  138. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-web-dist-build.service +0 -0
  139. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-web-dist-build.timer +0 -0
  140. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy/coord-web.service +0 -0
  141. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy_manifest.py +0 -0
  142. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deploy_units.py +0 -0
  143. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deprecation_telemetry.py +0 -0
  144. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/deps.py +0 -0
  145. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/diagnose.py +0 -0
  146. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dispatch.py +0 -0
  147. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dispatch_liveness.py +0 -0
  148. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dist_name.py +0 -0
  149. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dr_promote.py +0 -0
  150. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/dr_verify.py +0 -0
  151. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive.py +0 -0
  152. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive_queue.py +0 -0
  153. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive_sessions_snapshot.py +0 -0
  154. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/drive_state.py +0 -0
  155. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/events.py +0 -0
  156. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/failure_class.py +0 -0
  157. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/failure_classifier.py +0 -0
  158. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/filelock.py +0 -0
  159. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/fleet_config_health.py +0 -0
  160. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/forge_availability.py +0 -0
  161. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/freshness.py +0 -0
  162. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gate_a.py +0 -0
  163. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gate_b.py +0 -0
  164. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gate_snapshot.py +0 -0
  165. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/gen_board_fixture.py +0 -0
  166. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/github_ops.py +0 -0
  167. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/github_throttle.py +0 -0
  168. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/goal.py +0 -0
  169. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/graph_health.py +0 -0
  170. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/__init__.py +0 -0
  171. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/aggregate.py +0 -0
  172. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/__init__.py +0 -0
  173. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/_ci_pin.py +0 -0
  174. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/agent_install.py +0 -0
  175. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/cargo_targets.py +0 -0
  176. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/claude_binary.py +0 -0
  177. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/config_drift.py +0 -0
  178. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  179. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/coord_web_ci_pin.py +0 -0
  180. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/deploy_lane_facts.py +0 -0
  181. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/disk.py +0 -0
  182. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_board.py +0 -0
  183. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  184. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_phantom.py +0 -0
  185. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/fleet_unit_drift.py +0 -0
  186. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/graph.py +0 -0
  187. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/graphify_cli.py +0 -0
  188. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/index_lock.py +0 -0
  189. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/issues_sync_staleness.py +0 -0
  190. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/local_machine_identity.py +0 -0
  191. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/plan_usage.py +0 -0
  192. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/pr_churn.py +0 -0
  193. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/release_cordon.py +0 -0
  194. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/repo_state.py +0 -0
  195. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/spawned_coord.py +0 -0
  196. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/stalled_pipeline.py +0 -0
  197. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/timer_active.py +0 -0
  198. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/toolchain.py +0 -0
  199. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/unit_drift.py +0 -0
  200. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/unit_enablement.py +0 -0
  201. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/wedged_drive_queue.py +0 -0
  202. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/checks/worktrees.py +0 -0
  203. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/cli.py +0 -0
  204. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/context.py +0 -0
  205. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/fleet_snapshot.py +0 -0
  206. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/models.py +0 -0
  207. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/pypi.py +0 -0
  208. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/registry.py +0 -0
  209. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/render.py +0 -0
  210. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/health/units.py +0 -0
  211. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/hooks.py +0 -0
  212. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/housekeeping.py +0 -0
  213. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/interactive.py +0 -0
  214. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/invariant_alarms.py +0 -0
  215. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/issue_store.py +0 -0
  216. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/issues_sync_status.py +0 -0
  217. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/liveness_auditor.py +0 -0
  218. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_fault.py +0 -0
  219. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_metrics.py +0 -0
  220. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_onboard.py +0 -0
  221. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_pause.py +0 -0
  222. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/machine_stats.py +0 -0
  223. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/merge_queue.py +0 -0
  224. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_chat.py +0 -0
  225. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_dispatch.py +0 -0
  226. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_gate.py +0 -0
  227. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/milestone_order.py +0 -0
  228. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/mock_author.py +0 -0
  229. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/models.py +0 -0
  230. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/network.py +0 -0
  231. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/new_issue_chat.py +0 -0
  232. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/__init__.py +0 -0
  233. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/baseline.py +0 -0
  234. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/cli.py +0 -0
  235. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/collect.py +0 -0
  236. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/digest.py +0 -0
  237. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/models.py +0 -0
  238. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/predicate.py +0 -0
  239. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/service.py +0 -0
  240. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/store.py +0 -0
  241. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/notifier/transport.py +0 -0
  242. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/openapi.py +0 -0
  243. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/overlap_fence.py +0 -0
  244. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/overlap_predict.py +0 -0
  245. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/parentage.py +0 -0
  246. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/parentage_github.py +0 -0
  247. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/pipeline.py +0 -0
  248. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/plan_parser.py +0 -0
  249. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/plans.py +0 -0
  250. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/platform_paths.py +0 -0
  251. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/portal_bridge.py +0 -0
  252. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/portal_store.py +0 -0
  253. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/portal_sync.py +0 -0
  254. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/pr_body_lint.py +0 -0
  255. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/prereqs.py +0 -0
  256. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/progress.py +0 -0
  257. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/__init__.py +0 -0
  258. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/base.py +0 -0
  259. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/claude.py +0 -0
  260. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/claude_pty.py +0 -0
  261. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/providers/opencode.py +0 -0
  262. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/queue_diagnose.py +0 -0
  263. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/reconcile_tick.py +0 -0
  264. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/refine_chat.py +0 -0
  265. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_cordon.py +0 -0
  266. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_propagate.py +0 -0
  267. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_verify.py +0 -0
  268. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/release_window.py +0 -0
  269. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/repo_dormancy.py +0 -0
  270. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/repo_edit.py +0 -0
  271. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/repo_onboard.py +0 -0
  272. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/reports.py +0 -0
  273. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/rest_schema.py +0 -0
  274. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/restart_cmd.py +0 -0
  275. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/revalidate.py +0 -0
  276. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/review.py +0 -0
  277. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/scorecard.py +0 -0
  278. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/self_health.py +0 -0
  279. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/serve_app.py +0 -0
  280. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  281. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  282. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  283. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  284. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  285. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/portal-followup/SKILL.md +0 -0
  286. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/release-now/SKILL.md +0 -0
  287. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  288. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  289. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/skills/update-issue/SKILL.md +0 -0
  290. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/smoke.py +0 -0
  291. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/spend_ceiling.py +0 -0
  292. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/split_work.py +0 -0
  293. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/sql.py +0 -0
  294. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/stage_projection.py +0 -0
  295. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/state.py +0 -0
  296. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/store_migrate.py +0 -0
  297. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/store_parity.py +0 -0
  298. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/templates/deploy-cloudflare.node.yml +0 -0
  299. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_author.py +0 -0
  300. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_chat.py +0 -0
  301. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_orchestrator.py +0 -0
  302. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/test_report.py +0 -0
  303. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/tui_release.py +0 -0
  304. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/uat_checks.py +0 -0
  305. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/usage.py +0 -0
  306. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/usage_limits.py +0 -0
  307. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/usage_rollup.py +0 -0
  308. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coord/worker_events.py +0 -0
  309. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/coordinator.example.yml +0 -0
  310. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-agent.service +0 -0
  311. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-backup.service +0 -0
  312. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-backup.timer +0 -0
  313. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-db-backup.service +0 -0
  314. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-db-backup.sh +0 -0
  315. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-db-backup.timer +0 -0
  316. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-dr-verify.service +0 -0
  317. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-dr-verify.timer +0 -0
  318. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-drive-queue.service +0 -0
  319. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-drive-queue.timer +0 -0
  320. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-failure-notify.service +0 -0
  321. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-failure-notify.sh +0 -0
  322. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-fleet-watchdog.service +0 -0
  323. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-fleet-watchdog.timer +0 -0
  324. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-notify.service +0 -0
  325. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-notify.timer +0 -0
  326. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-propagate.service +0 -0
  327. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-propagate.timer +0 -0
  328. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-window.service +0 -0
  329. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-release-window.timer +0 -0
  330. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-serve.service +0 -0
  331. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-dist-build.service +0 -0
  332. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-dist-build.sh +0 -0
  333. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-dist-build.timer +0 -0
  334. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web-rollback.sh +0 -0
  335. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/coord-web.service +0 -0
  336. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/deploy/node-shim.sh +0 -0
  337. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_TUI_CI.md +0 -0
  338. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  339. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_WEB_CI.md +0 -0
  340. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_COORD_WEB_DIST.md +0 -0
  341. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  342. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/AGENT_OPERATIONS.md +0 -0
  343. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ARCHITECTURE.md +0 -0
  344. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ARCH_SECURITY_GATES.md +0 -0
  345. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/COCKPIT.md +0 -0
  346. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CONTROL_CENTER.md +0 -0
  347. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/COST_DISCIPLINE.md +0 -0
  348. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CROSS_PLATFORM.md +0 -0
  349. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CUSTOMER_FACING_APPS.md +0 -0
  350. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/CUSTOMER_PORTAL.md +0 -0
  351. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/DATA_STORE_SELECTION.md +0 -0
  352. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/DISASTER_RECOVERY.md +0 -0
  353. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/DRIVE_QUEUE.md +0 -0
  354. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/EPHEMERAL_WORKERS.md +0 -0
  355. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/FORGE_MIGRATION.md +0 -0
  356. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/GRAPHIFY_SETUP.md +0 -0
  357. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ISSUE_GUIDANCE.md +0 -0
  358. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/MAC_MINI.md +0 -0
  359. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  360. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/NOTIFIER.md +0 -0
  361. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/OPENCODE_VERIFICATION.md +0 -0
  362. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/OPERATING_GOTCHAS.md +0 -0
  363. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/OPERATOR_GUIDES.md +0 -0
  364. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/ORACLE_LOOP.md +0 -0
  365. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/PHONE_WEBAPP.md +0 -0
  366. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/PIPELINE_V2.md +0 -0
  367. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/PLATFORM_EVOLUTION.md +0 -0
  368. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/SECOND_BACKEND.md +0 -0
  369. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/STORE_SERVICE.md +0 -0
  370. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  371. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/WEB_CONTROL_CENTER.md +0 -0
  372. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/WSL_WINDOWS_WORKER.md +0 -0
  373. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/README.md +0 -0
  374. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/_tokens.css +0 -0
  375. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/issue-detail.html +0 -0
  376. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/pipeline-narrow.html +0 -0
  377. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/docs/mocks/web/pipeline-wide.html +0 -0
  378. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/graphify-out/.gitignore +0 -0
  379. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/install-agent.sh +0 -0
  380. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/pyproject.toml +0 -0
  381. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/audit_review_verdict_overrides.py +0 -0
  382. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  383. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/build-worker-image.sh +0 -0
  384. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/coordinator-machine.py +0 -0
  385. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/dr-down.sh +0 -0
  386. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/dr-up.sh +0 -0
  387. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/epic-down.sh +0 -0
  388. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/epic-up.sh +0 -0
  389. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/preflight.sh +0 -0
  390. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/provision-server.sh +0 -0
  391. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/provision-worker.sh +0 -0
  392. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  393. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  394. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/throwaway-vm.sh +0 -0
  395. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/azure-workers/verify-github-token.sh +0 -0
  396. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/check_gh_argv_containment.py +0 -0
  397. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/codegen.py +0 -0
  398. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-test-runner.sh +0 -0
  399. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  400. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  401. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  402. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  403. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/coord-venv-rollback.sh +0 -0
  404. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/drive-batch.sh +0 -0
  405. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/extract-coord-tui.sh +0 -0
  406. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/fleet_watchdog.py +0 -0
  407. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/gen_board_fixture.py +0 -0
  408. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/gen_mock_index.py +0 -0
  409. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/lib/provision-core.sh +0 -0
  410. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/next_release_tag.py +0 -0
  411. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/provision-machine.sh +0 -0
  412. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/run_tests_in_populated_home.sh +0 -0
  413. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/run_tests_without_gh.sh +0 -0
  414. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/setup-macmini.sh +0 -0
  415. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/smoke_437_interactive.py +0 -0
  416. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify-provision-noble.sh +0 -0
  417. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify_878_review_capture.py +0 -0
  418. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify_release_published.py +0 -0
  419. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/scripts/verify_release_wheel.py +0 -0
  420. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/setup.cfg +0 -0
  421. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/SMOKE_SET.md +0 -0
  422. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/__init__.py +0 -0
  423. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/conftest.py +0 -0
  424. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/contract.md +0 -0
  425. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/manifest.yml +0 -0
  426. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  427. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  428. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/contract.md +0 -0
  429. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  430. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  431. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/manifest.yml +0 -0
  432. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  433. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-51/tsconfig.json +0 -0
  434. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  435. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/backends.py +0 -0
  436. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/conftest.py +0 -0
  437. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/board-pipeline-basic.json +0 -0
  438. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  439. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  440. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  441. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  442. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/all_pass.json +0 -0
  443. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  444. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/mixed_fail.json +0 -0
  445. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  446. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  447. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/skip.json +0 -0
  448. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/playwright/truncated.json +0 -0
  449. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  450. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  451. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  452. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  453. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  454. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  455. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  456. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  457. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_acceptance.py +0 -0
  458. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_acceptance_drivers.py +0 -0
  459. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent.py +0 -0
  460. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_api_error.py +0 -0
  461. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_app.py +0 -0
  462. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_branch_base.py +0 -0
  463. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_branch_capture.py +0 -0
  464. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_config_free_1712.py +0 -0
  465. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_deploy_units_endpoint.py +0 -0
  466. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_dirty_worktree.py +0 -0
  467. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  468. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_graph_self_heal.py +0 -0
  469. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_health_h3.py +0 -0
  470. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_idle_restart.py +0 -0
  471. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_push_failure.py +0 -0
  472. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_reap.py +0 -0
  473. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_repos_and_pull.py +0 -0
  474. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_restart_services_endpoint.py +0 -0
  475. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_skills_self_heal.py +0 -0
  476. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_startup_diagnostics.py +0 -0
  477. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_update.py +0 -0
  478. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_update_bluegreen.py +0 -0
  479. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_usage_limit.py +0 -0
  480. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_agent_zero_commit.py +0 -0
  481. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ambient_home_isolation.py +0 -0
  482. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_capability_reroute_3241.py +0 -0
  483. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_dependency_busy_2804.py +0 -0
  484. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_reject_plan.py +0 -0
  485. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approve_usage_gate.py +0 -0
  486. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approved_work_2532.py +0 -0
  487. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_approved_work_2996.py +0 -0
  488. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_assignment_already_recorded_daemon.py +0 -0
  489. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_audit_log.py +0 -0
  490. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_audit_outcome.py +0 -0
  491. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_audit_query.py +0 -0
  492. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_auto_loop.py +0 -0
  493. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_auto_release_publish_2035.py +0 -0
  494. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_backend_selection.py +0 -0
  495. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_backup.py +0 -0
  496. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_base_checkout_restore.py +0 -0
  497. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_block_log.py +0 -0
  498. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_cap_762.py +0 -0
  499. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_fixture.py +0 -0
  500. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_read_path.py +0 -0
  501. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_schema.py +0 -0
  502. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_service.py +0 -0
  503. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_state.py +0 -0
  504. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_board_wire.py +0 -0
  505. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_brain.py +0 -0
  506. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_branch_model.py +0 -0
  507. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_bug_intake.py +0 -0
  508. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_build_worker_image_env_update.py +0 -0
  509. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cargo_cache.py +0 -0
  510. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_check_gh_argv_containment.py +0 -0
  511. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_acceptance_gate_1950.py +0 -0
  512. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_fix.py +0 -0
  513. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_github.py +0 -0
  514. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_gitlab.py +0 -0
  515. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_parity_2091.py +0 -0
  516. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_ci_store.py +0 -0
  517. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_claim.py +0 -0
  518. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_claude_md_budget.py +0 -0
  519. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_claude_setup_token.py +0 -0
  520. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_acceptance.py +0 -0
  521. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign.py +0 -0
  522. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  523. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_interactive_remote.py +0 -0
  524. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_provider.py +0 -0
  525. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  526. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_audit.py +0 -0
  527. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_chat_continue.py +0 -0
  528. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_ci.py +0 -0
  529. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_codegen.py +0 -0
  530. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_decide.py +0 -0
  531. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_capability_rules.py +0 -0
  532. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_config_provenance.py +0 -0
  533. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_forge_availability.py +0 -0
  534. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_graph.py +0 -0
  535. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_self.py +0 -0
  536. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_diagnose_test_coverage.py +0 -0
  537. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor.py +0 -0
  538. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor_config_free_1801.py +0 -0
  539. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  540. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  541. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_drive.py +0 -0
  542. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_drive_queue.py +0 -0
  543. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_escalate.py +0 -0
  544. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_fix_headless_review.py +0 -0
  545. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_gate_a.py +0 -0
  546. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_install_drift.py +0 -0
  547. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_install_skills.py +0 -0
  548. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_comment.py +0 -0
  549. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_create_label.py +0 -0
  550. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_reopen.py +0 -0
  551. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issue_view_list.py +0 -0
  552. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_issues.py +0 -0
  553. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_merge.py +0 -0
  554. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_assign.py +0 -0
  555. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_capture.py +0 -0
  556. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_chat_add_child.py +0 -0
  557. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_dispatch.py +0 -0
  558. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_gate_b.py +0 -0
  559. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_gate_c.py +0 -0
  560. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_order.py +0 -0
  561. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  562. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_milestone_ship.py +0 -0
  563. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_network.py +0 -0
  564. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_new_issue_chat.py +0 -0
  565. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_plans.py +0 -0
  566. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_portal.py +0 -0
  567. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_pr.py +0 -0
  568. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_pull_artifact.py +0 -0
  569. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_queue.py +0 -0
  570. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_reattach_sessions.py +0 -0
  571. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_refine_board.py +0 -0
  572. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_release_preflight.py +0 -0
  573. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_release_propagate.py +0 -0
  574. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_release_window.py +0 -0
  575. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_repo_2220.py +0 -0
  576. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  577. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_scorecard.py +0 -0
  578. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_serve_store_backend_3084.py +0 -0
  579. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_set_review_findings.py +0 -0
  580. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_advisory_terminal.py +0 -0
  581. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_contested_tag.py +0 -0
  582. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_invariant_alarms.py +0 -0
  583. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_machine_fault.py +0 -0
  584. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_merge_queue.py +0 -0
  585. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_provider.py +0 -0
  586. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_retried_3340.py +0 -0
  587. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_review_finalizing.py +0 -0
  588. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_supervisor_3366.py +0 -0
  589. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_test_failed_tag.py +0 -0
  590. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_status_usage_limit.py +0 -0
  591. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_sync_comments_873.py +0 -0
  592. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_test_plan.py +0 -0
  593. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_track.py +0 -0
  594. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_tui_update.py +0 -0
  595. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cli_wait.py +0 -0
  596. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client.py +0 -0
  597. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client_base_install.py +0 -0
  598. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client_config_cache_atomic_3052.py +0 -0
  599. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_client_resource_migration_1946.py +0 -0
  600. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_commands_common.py +0 -0
  601. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_comments.py +0 -0
  602. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_completion_summary.py +0 -0
  603. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config.py +0 -0
  604. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_acceptance.py +0 -0
  605. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_audit.py +0 -0
  606. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_drift_check.py +0 -0
  607. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_effective.py +0 -0
  608. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_pricing.py +0 -0
  609. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  610. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_config_usage_gate.py +0 -0
  611. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_confirm_test.py +0 -0
  612. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_conflict_fix_semantic.py +0 -0
  613. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  614. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test.py +0 -0
  615. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  616. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_baseline.py +0 -0
  617. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_populated_home.py +0 -0
  618. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_routing.py +0 -0
  619. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_test_runner_toolchain.py +0 -0
  620. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_uat.py +0 -0
  621. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coord_web_sse_restart_live.py +0 -0
  622. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_coordinator_machine.py +0 -0
  623. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_cross_platform_imports.py +0 -0
  624. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dao.py +0 -0
  625. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard.py +0 -0
  626. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_api.py +0 -0
  627. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_fixture.py +0 -0
  628. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_server.py +0 -0
  629. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_terminal.py +0 -0
  630. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dashboard_terminal_live.py +0 -0
  631. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_db.py +0 -0
  632. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dead_end.py +0 -0
  633. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_decomposition_chat.py +0 -0
  634. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_coord_db_backup.py +0 -0
  635. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_coord_web_dist.py +0 -0
  636. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_coord_web_rollback.py +0 -0
  637. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_db_backup_unit.py +0 -0
  638. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_drive_queue_unit.py +0 -0
  639. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_failure_notify_unit.py +0 -0
  640. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_manifest.py +0 -0
  641. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_notify_unit.py +0 -0
  642. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_units_lane.py +0 -0
  643. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deploy_web_unit.py +0 -0
  644. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deprecation_telemetry.py +0 -0
  645. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_deps.py +0 -0
  646. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_diagnose.py +0 -0
  647. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch.py +0 -0
  648. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch_liveness.py +0 -0
  649. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch_target_validation.py +0 -0
  650. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dispatch_workers.py +0 -0
  651. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dist_name.py +0 -0
  652. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_done_housekeeping.py +0 -0
  653. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dr_azure_scripts.py +0 -0
  654. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dr_promote.py +0 -0
  655. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_dr_verify.py +0 -0
  656. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive.py +0 -0
  657. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_machine_fault.py +0 -0
  658. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue.py +0 -0
  659. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_blocked_rendering.py +0 -0
  660. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_launch_argv.py +0 -0
  661. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_max_parallel_config.py +0 -0
  662. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  663. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_roll_pending.py +0 -0
  664. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  665. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_sessions_snapshot.py +0 -0
  666. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_state.py +0 -0
  667. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_drive_tmux.py +0 -0
  668. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_epic_up_capability_detection.py +0 -0
  669. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  670. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_epic_up_image_provenance.py +0 -0
  671. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_errors.py +0 -0
  672. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_events.py +0 -0
  673. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_failure_class.py +0 -0
  674. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_failure_classifier.py +0 -0
  675. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_filelock.py +0 -0
  676. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  677. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fix_escalation_classifier.py +0 -0
  678. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fix_of_force_override.py +0 -0
  679. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_config_health.py +0 -0
  680. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_health_probes.py +0 -0
  681. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_health_snapshot.py +0 -0
  682. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_fleet_watchdog.py +0 -0
  683. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_forge_availability.py +0 -0
  684. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_freshness.py +0 -0
  685. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gate_a.py +0 -0
  686. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gate_b.py +0 -0
  687. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gate_snapshot_staleness.py +0 -0
  688. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  689. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_gen_mock_index.py +0 -0
  690. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_generated_rust_fixture.py +0 -0
  691. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_generated_rust_requests.py +0 -0
  692. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_generated_types_fixture.py +0 -0
  693. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_github_ops.py +0 -0
  694. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_github_throttle.py +0 -0
  695. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_goal.py +0 -0
  696. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_graph_health.py +0 -0
  697. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_graph_selfheal_absent_2237.py +0 -0
  698. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_handoff.py +0 -0
  699. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_checks.py +0 -0
  700. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_cli.py +0 -0
  701. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_cli_graph.py +0 -0
  702. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_config.py +0 -0
  703. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_context.py +0 -0
  704. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_coord_tui_ci_pin.py +0 -0
  705. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_coord_web_ci_pin.py +0 -0
  706. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_deploy_lane_facts.py +0 -0
  707. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_fix.py +0 -0
  708. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_incident_regression.py +0 -0
  709. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_issues_sync_staleness.py +0 -0
  710. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_pr_churn.py +0 -0
  711. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_pypi.py +0 -0
  712. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_registry.py +0 -0
  713. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_release_cordon_probe.py +0 -0
  714. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_timer_active.py +0 -0
  715. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_toolchain.py +0 -0
  716. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_unit_drift.py +0 -0
  717. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_unit_enablement.py +0 -0
  718. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_health_wedged_drive_queue.py +0 -0
  719. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_hooks.py +0 -0
  720. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_housekeeping.py +0 -0
  721. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_human_attended_437.py +0 -0
  722. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_init.py +0 -0
  723. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_install_agent_venv_2911.py +0 -0
  724. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_integration.py +0 -0
  725. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive.py +0 -0
  726. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_briefing_echo.py +0 -0
  727. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_pane_log_2541.py +0 -0
  728. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_prefill_state.py +0 -0
  729. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_session_relaunch.py +0 -0
  730. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_test_verdict_backstop.py +0 -0
  731. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_token_attribution.py +0 -0
  732. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_interactive_worktree.py +0 -0
  733. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_invariant_alarms.py +0 -0
  734. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_issue_store_seam.py +0 -0
  735. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_issues_sync_status.py +0 -0
  736. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_liveness_auditor.py +0 -0
  737. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_liveness_notify.py +0 -0
  738. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_lock_contention_ratchet.py +0 -0
  739. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_fault.py +0 -0
  740. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_metrics.py +0 -0
  741. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_onboard.py +0 -0
  742. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_pause.py +0 -0
  743. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_machine_stats.py +0 -0
  744. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_merge_queue.py +0 -0
  745. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_merge_verify.py +0 -0
  746. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_chat.py +0 -0
  747. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_dispatch.py +0 -0
  748. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_gate.py +0 -0
  749. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_order.py +0 -0
  750. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_milestone_seam.py +0 -0
  751. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_mock_author.py +0 -0
  752. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_model_tiering.py +0 -0
  753. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_models.py +0 -0
  754. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_models_config_labels.py +0 -0
  755. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_needs_attention.py +0 -0
  756. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_network.py +0 -0
  757. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_new_issue_chat.py +0 -0
  758. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_next_release_tag.py +0 -0
  759. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_node_shim.py +0 -0
  760. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_baseline.py +0 -0
  761. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_cli.py +0 -0
  762. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_collect.py +0 -0
  763. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_config.py +0 -0
  764. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_drive_seam.py +0 -0
  765. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_isolation.py +0 -0
  766. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_predicate.py +0 -0
  767. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_quiet_hours.py +0 -0
  768. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notifier_service.py +0 -0
  769. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_notify_drain.py +0 -0
  770. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_openapi.py +0 -0
  771. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_operational_defaults.py +0 -0
  772. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_overlap_fence.py +0 -0
  773. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_overlap_predict.py +0 -0
  774. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_packaged_deploy_units.py +0 -0
  775. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_parentage.py +0 -0
  776. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_paste_landed.py +0 -0
  777. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  778. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_pipeline.py +0 -0
  779. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_followup_approve_plan_command.py +0 -0
  780. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_followup_pr_command.py +0 -0
  781. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_followup_review_command.py +0 -0
  782. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_only.py +0 -0
  783. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_plan_parser.py +0 -0
  784. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_platform_paths.py +0 -0
  785. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_bridge.py +0 -0
  786. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_config.py +0 -0
  787. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_store.py +0 -0
  788. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_portal_sync.py +0 -0
  789. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_pr_body_lint.py +0 -0
  790. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_prereqs.py +0 -0
  791. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_production_db_guard.py +0 -0
  792. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_progress.py +0 -0
  793. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_provider_seam.py +0 -0
  794. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_providers.py +0 -0
  795. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_providers_config_labels.py +0 -0
  796. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_providers_pty.py +0 -0
  797. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_provision_core.py +0 -0
  798. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_provision_machine.py +0 -0
  799. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_py_rust_mirror_inventory.py +0 -0
  800. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_quiet_hours.py +0 -0
  801. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_quiet_hours_store_2146.py +0 -0
  802. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reap_merged_sessions.py +0 -0
  803. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reap_stale_interactive_tick.py +0 -0
  804. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_branch.py +0 -0
  805. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_completions.py +0 -0
  806. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  807. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_merges.py +0 -0
  808. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_no_agent_record.py +0 -0
  809. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_tick.py +0 -0
  810. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reconcile_usage_limit_done.py +0 -0
  811. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_refine_chat.py +0 -0
  812. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_2101.py +0 -0
  813. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  814. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_deadlock_2240.py +0 -0
  815. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  816. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_cordon_stuck_2490.py +0 -0
  817. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_propagate.py +0 -0
  818. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_propagate_threshold.py +0 -0
  819. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_roll_between_legs_2854.py +0 -0
  820. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_roll_window_handoff.py +0 -0
  821. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_unified_1242.py +0 -0
  822. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_verify.py +0 -0
  823. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_release_window.py +0 -0
  824. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_remote_auto_prune.py +0 -0
  825. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_remote_interactive_reaper.py +0 -0
  826. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_add.py +0 -0
  827. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_dormancy.py +0 -0
  828. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_edit_2220.py +0 -0
  829. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_graph_fleet_2237.py +0 -0
  830. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_max_parallel_3423.py +0 -0
  831. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_repo_onboard_2220.py +0 -0
  832. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_report_result_push.py +0 -0
  833. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_reports.py +0 -0
  834. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_restart_cmd.py +0 -0
  835. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry.py +0 -0
  836. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry_advisory_1606.py +0 -0
  837. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry_escalation_classify_3360.py +0 -0
  838. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_retry_type_1636.py +0 -0
  839. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_revalidate.py +0 -0
  840. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review.py +0 -0
  841. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_end_review_without_verdict.py +0 -0
  842. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_parse_failure_diagnostic.py +0 -0
  843. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_reaffirm.py +0 -0
  844. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_state.py +0 -0
  845. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_verdict_backstop.py +0 -0
  846. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_verdict_override_audit.py +0 -0
  847. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_verdict_relay.py +0 -0
  848. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_review_zero_commits.py +0 -0
  849. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_scoped_review_wiring.py +0 -0
  850. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_scorecard.py +0 -0
  851. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_self_health.py +0 -0
  852. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve.py +0 -0
  853. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve_app.py +0 -0
  854. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve_app_board_trim.py +0 -0
  855. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_serve_rest_routes.py +0 -0
  856. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_session.py +0 -0
  857. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_slice_issue_attribution.py +0 -0
  858. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke.py +0 -0
  859. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  860. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke_live_checkout_restore.py +0 -0
  861. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_smoke_workflow.py +0 -0
  862. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_spend_ceiling.py +0 -0
  863. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_spend_ceiling_coordinator.py +0 -0
  864. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_split.py +0 -0
  865. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_split_work.py +0 -0
  866. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_sql_dialect.py +0 -0
  867. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_sqlite_connect_ratchet.py +0 -0
  868. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stage_projection.py +0 -0
  869. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stale_busy_reviewer_697.py +0 -0
  870. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stalled_pipeline.py +0 -0
  871. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_state.py +0 -0
  872. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_state_review_findings_daemon.py +0 -0
  873. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_status_fleet_footer.py +0 -0
  874. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stop_1567.py +0 -0
  875. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_store_contract.py +0 -0
  876. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_store_migrate.py +0 -0
  877. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stuck.py +0 -0
  878. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  879. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_terminal_command.py +0 -0
  880. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_author.py +0 -0
  881. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_chat.py +0 -0
  882. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_orchestrator.py +0 -0
  883. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_report.py +0 -0
  884. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_verdict_parsing.py +0 -0
  885. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_test_verdict_transcript_floor.py +0 -0
  886. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_text_io_encoding_audit.py +0 -0
  887. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_thin_client_board_audit.py +0 -0
  888. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_thin_client_config_load_1080.py +0 -0
  889. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_thin_client_daemon_routing_906.py +0 -0
  890. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_throwaway_vm.py +0 -0
  891. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_tmux_host.py +0 -0
  892. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_tmux_session.py +0 -0
  893. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_transcript_floor.py +0 -0
  894. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_uat_checks.py +0 -0
  895. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_usage.py +0 -0
  896. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_usage_limits.py +0 -0
  897. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_usage_rollup.py +0 -0
  898. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_venv_live_install_2121.py +0 -0
  899. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_version_single_source.py +0 -0
  900. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_watch.py +0 -0
  901. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  902. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_env_venv_isolation.py +0 -0
  903. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_events.py +0 -0
  904. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_image_pin_sync.py +0 -0
  905. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_safety.py +0 -0
  906. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worker_test_scoping.py +0 -0
  907. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worktree.py +0 -0
  908. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  909. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/tests/test_write_parity.py +0 -0
  910. {code_coordinator-0.5.518 → code_coordinator-0.5.520}/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.518
3
+ Version: 0.5.520
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.518
3
+ Version: 0.5.520
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.518",
2
+ "tag": "0.5.520",
3
3
  "distance": 0,
4
- "node": "gdba4bd13008ab845617ff22df60d1009a4ce15b9",
4
+ "node": "g2ea6b6f3078698338dac5da492049a1c5a760d8e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-26"
@@ -928,6 +928,7 @@ def has_prior_conflict_fix(
928
928
  merge_entry_id: str | None,
929
929
  *,
930
930
  current_error: str | None = None,
931
+ ignore_stale_rebase_attempts: bool = False,
931
932
  ) -> bool:
932
933
  """True when a second conflict-fix dispatch for *merge_entry_id* is blocked.
933
934
 
@@ -952,6 +953,21 @@ def has_prior_conflict_fix(
952
953
  recurring unchanged — not a fresh conflict — so it now consumes the cap
953
954
  too. Callers that don't pass *current_error* keep the pre-#2475 behaviour
954
955
  (``done`` never blocks) since they have no error text to compare.
956
+
957
+ *ignore_stale_rebase_attempts* (#3444): a stale-rebase dispatch
958
+ (``dispatch_conflict_fix(..., stale_rebase=True)``, title prefixed
959
+ :data:`STALE_REBASE_FIX_TITLE_PREFIX`) never even attempts a mechanical
960
+ resolution — it is authorized ONLY for a pure, content-preserving
961
+ rebase, and its own briefing embeds the SAME ``entry.error`` as its
962
+ "Reason:" line. Without this flag, its refusal (agent-reported ``done``,
963
+ downgraded to a give-up by the ``stale-rebase-mismatch`` marker — see
964
+ :func:`detect_stale_rebase_mismatch`) would trip the #2475
965
+ identical-error check above and block the ordinary conflict-fix #3444
966
+ escalates to right after, even though the ordinary path hasn't been
967
+ tried yet. Set by the one caller doing that escalation
968
+ (:func:`coord.reconcile._try_ordinary_escalation_after_stale_mismatch`)
969
+ to skip every stale-rebase-titled row entirely — active or not — so
970
+ ONLY prior *ordinary* conflict-fix attempts count against the cap.
955
971
  """
956
972
  if merge_entry_id is None:
957
973
  return False
@@ -960,6 +976,10 @@ def has_prior_conflict_fix(
960
976
  continue
961
977
  if a.review_of_assignment_id != merge_entry_id:
962
978
  continue
979
+ if ignore_stale_rebase_attempts and (a.issue_title or "").startswith(
980
+ STALE_REBASE_FIX_TITLE_PREFIX,
981
+ ):
982
+ continue
963
983
  # Active attempt in flight — prevent duplicate dispatch.
964
984
  if a.status in ("running", "pending"):
965
985
  return True
@@ -1254,6 +1274,7 @@ def dispatch_conflict_fix(
1254
1274
  model: str | None = None,
1255
1275
  stuck_summary: str | None = None,
1256
1276
  stale_rebase: bool = False,
1277
+ after_stale_rebase_mismatch: bool = False,
1257
1278
  status_fetcher: Callable[..., StatusResult] | None = None,
1258
1279
  machine_pick_out: "list[ConflictFixMachinePick] | None" = None,
1259
1280
  ) -> Assignment | None:
@@ -1357,6 +1378,23 @@ def dispatch_conflict_fix(
1357
1378
  (non-``semantic``) path below — a staleness-only block that recurs
1358
1379
  against the same error after a prior conflict-fix attempt escalates to
1359
1380
  a human exactly like a recurring mechanical conflict would.
1381
+
1382
+ ``after_stale_rebase_mismatch=True`` (#3444) dispatches the ORDINARY
1383
+ conflict-fix path (same briefing/system-prompt/title as the plain
1384
+ ``else`` branch below — this is not a distinct dispatch kind, just a
1385
+ retry-cap carve-out) right after a stale-rebase worker's
1386
+ ``stale-rebase-mismatch`` refusal: that verdict means the *just-stale*
1387
+ premise was wrong — the rebase hit a genuine content conflict, so this
1388
+ is an ordinary conflict that deserves the ordinary mechanical attempt,
1389
+ not an immediate HUMAN_REQUIRED. Passes
1390
+ ``ignore_stale_rebase_attempts=True`` to :func:`has_prior_conflict_fix`
1391
+ so the just-failed stale-rebase attempt — which never even tried a
1392
+ mechanical resolution — doesn't itself consume this cap; only a prior
1393
+ *ordinary* conflict-fix attempt does, capping this escalation at one
1394
+ per entry same as everything else here. #3349's safety property is
1395
+ unaffected: the stale-rebase worker itself still never resolves
1396
+ anything — only this ordinary worker (or its own semantic-escalation
1397
+ tier) may.
1360
1398
  """
1361
1399
  if semantic:
1362
1400
  if has_prior_semantic_escalation(board, entry.assignment_id):
@@ -1365,6 +1403,7 @@ def dispatch_conflict_fix(
1365
1403
  return None
1366
1404
  elif has_prior_conflict_fix(
1367
1405
  board, entry.assignment_id, current_error=entry.error,
1406
+ ignore_stale_rebase_attempts=after_stale_rebase_mismatch,
1368
1407
  ):
1369
1408
  return None
1370
1409
 
@@ -1576,6 +1615,11 @@ def dispatch_conflict_fix(
1576
1615
  # rebase dispatch from an ordinary conflict-fix without
1577
1616
  # re-deriving it from the assignment title prefix.
1578
1617
  "stale_rebase": stale_rebase,
1618
+ # #3444: distinguishes an ordinary conflict-fix dispatched
1619
+ # normally from one escalated right after a stale-rebase
1620
+ # worker's mismatch refusal — same title/briefing either way,
1621
+ # so this is the only durable trace of which path led here.
1622
+ "after_stale_rebase_mismatch": after_stale_rebase_mismatch,
1579
1623
  },
1580
1624
  )
1581
1625
 
@@ -42,6 +42,7 @@ duck-typed shape they expect.
42
42
  from __future__ import annotations
43
43
 
44
44
  from dataclasses import asdict, dataclass, field
45
+ from datetime import datetime, timezone
45
46
  from typing import TYPE_CHECKING
46
47
 
47
48
  from coord.confirm_test import (
@@ -60,6 +61,21 @@ if TYPE_CHECKING: # avoid import cycles / heavy imports at module load
60
61
  # "smoke_required" finds both a live merge attempt AND a `coord gates` read.
61
62
  REVIEW_REQUIRED = "review_required"
62
63
  SMOKE_REQUIRED = "smoke_required"
64
+ # #3445: distinct from the two tokens above — a latched HUMAN_REQUIRED
65
+ # merge-queue entry (an automated conflict-fix that already gave up, #1291)
66
+ # is not "review/smoke unmet", it is "the merge itself already failed and
67
+ # needs a human (or `--override-human-required`)". Clearing review or smoke
68
+ # cannot unstick it, so it outranks both as the merge gate's headline reason
69
+ # — see `_merge_queue_state_decision` and its call site in
70
+ # `build_gate_report`.
71
+ HUMAN_REQUIRED_BLOCKED = "human_required"
72
+ # #3445 review: SKIPPED is `_merge_queue_state_decision`'s own comment's
73
+ # other "parked, needs-attention" state alongside HUMAN_REQUIRED (and
74
+ # `coord/drive.py`'s `_RETRYABLE_MERGE_STATUSES` docstring independently
75
+ # documents it as equally terminal, unlike CONFLICT, which self-heals via
76
+ # `dispatch_conflict_fix` and is deliberately NOT in this override) — so it
77
+ # gets the same headline-outranking treatment, not just HUMAN_REQUIRED.
78
+ SKIPPED_BLOCKED = "skipped"
63
79
 
64
80
 
65
81
  @dataclass
@@ -451,6 +467,124 @@ def _exempt_dependency_notes_for_winner(
451
467
  return []
452
468
 
453
469
 
470
+ def _iso(ts: float | None) -> str | None:
471
+ if not ts:
472
+ return None
473
+ return datetime.fromtimestamp(float(ts), tz=timezone.utc).strftime("%Y-%m-%d %H:%M:%SZ")
474
+
475
+
476
+ def _merge_queue_state_decision(
477
+ repo_name: str, issue_number: int, fallback_assignment_id: str | None,
478
+ ) -> GateDecision | None:
479
+ """The REAL, persisted ``merge_queue`` row's state for
480
+ ``(repo_name, issue_number)``, or ``None`` when no such row exists
481
+ (#3445).
482
+
483
+ This is deliberately a *second* read, distinct from the synthetic
484
+ ``QueuedMerge`` :func:`build_gate_report` builds via
485
+ ``mq.live_gate_entry`` to feed the review/test/registry gate checks:
486
+ that object is constructed fresh on every call and never persisted, so
487
+ it always carries the dataclass default ``state=PENDING`` — it was
488
+ never going to surface a *latched* CONFLICT/HUMAN_REQUIRED/SKIPPED.
489
+ Before this, ``coord gates`` had no read of the real merge-queue table
490
+ at all, so an issue whose entry had already given up (an automated
491
+ conflict-fix exhausting its one retry, #1291, or a stale-rebase worker
492
+ refusing to push a non-content-preserving rebase) reported
493
+ ``merge : BLOCKED — smoke_required`` — true in isolation, but not the
494
+ reason nothing is moving: clearing the smoke gate cannot unstick a
495
+ HUMAN_REQUIRED entry, only a human (or ``coord merge --only <aid>
496
+ --override-human-required``) can.
497
+
498
+ Matched on ``(repo_name, issue_number)`` — the same two facts
499
+ :func:`coord.drive_state._merge_entry` matches the raw ``merge_queue``
500
+ row against for exactly the same reason (a fix-chain may have re-keyed
501
+ the entry's ``assignment_id`` to a newer work row) — with
502
+ *fallback_assignment_id* (the winning work row `build_gate_report`
503
+ already selected) preferred when more than one row matches.
504
+
505
+ Fail-open like every other best-effort DB read in this module
506
+ (``_backfill_is_interactive``, ``_apply_gate_decision``): an
507
+ unreachable DB degrades to "no merge-queue line" rather than failing
508
+ the whole ``coord gates`` read.
509
+ """
510
+ try:
511
+ from coord import merge_queue as mq # noqa: PLC0415
512
+
513
+ entries = mq.load_queue()
514
+ except Exception: # noqa: BLE001 — advisory only, see docstring
515
+ return None
516
+
517
+ matches = [
518
+ e for e in entries
519
+ if e.repo_name == repo_name and e.issue_number == issue_number
520
+ ]
521
+ if not matches:
522
+ return None
523
+ if fallback_assignment_id:
524
+ by_aid = [e for e in matches if e.assignment_id == fallback_assignment_id]
525
+ if by_aid:
526
+ matches = by_aid
527
+ # First match in list order — not the most recent — mirroring
528
+ # `coord.drive_state._merge_entry` (the docstring's own cited
529
+ # precedent for matching on this same `(repo_name, issue_number)` pair):
530
+ # when more than one row matches and none matches *fallback_assignment_id*
531
+ # (e.g. a retarget/new branch for the same issue left an old row behind),
532
+ # `coord gates` must agree with the other `merge_queue` consumers
533
+ # (`coord drive-queue block-log`, `coord status`, `_decide_merge`) on
534
+ # which row is "the" entry, or the same issue reads differently on
535
+ # different surfaces (#3445 review).
536
+ entry = matches[0]
537
+
538
+ state = (entry.state or "").upper()
539
+ # PENDING/MERGING/MERGED (and any future non-terminal state) read as
540
+ # "nothing to escalate here" — the raw state name is still shown, but
541
+ # unadorned. CONFLICT/HUMAN_REQUIRED/SKIPPED are the parked, needs-
542
+ # attention states. Delegated to `mq._state_to_plan_status` — the
543
+ # CANONICAL classifier for this exact question (`PENDING`->READY,
544
+ # `MERGING`->MERGING, `MERGED`->MERGED, anything else, including any
545
+ # future/unknown state -> NEEDS_ATTENTION) — rather than a second,
546
+ # hand-maintained tuple of "which states need attention" that could
547
+ # silently drift from it (#2096, #3445 review). That classifier fails
548
+ # CLOSED on an unrecognized state; re-deriving the tri-state locally
549
+ # would fail open instead, exactly the "gate must be able to fail"
550
+ # pattern this repo's review checklist calls out.
551
+ ok = mq._state_to_plan_status(entry.state or "") != mq.PLAN_NEEDS_ATTENTION
552
+
553
+ reason: str | None = None
554
+ if state == "HUMAN_REQUIRED":
555
+ aid = entry.assignment_id or fallback_assignment_id or "<assignment-id>"
556
+ detail_lines = [entry.error or "no reason recorded"]
557
+ latched = _iso(entry.last_attempt)
558
+ if latched:
559
+ detail_lines.append(
560
+ f"as of last merge-queue write {latched} — this timestamp "
561
+ "does not advance while the entry is parked, so treat it as "
562
+ "a LOWER BOUND on when it latched, not necessarily still "
563
+ "current (#3445)"
564
+ )
565
+ else:
566
+ detail_lines.append(
567
+ "latched time unknown — no merge-queue attempt timestamp "
568
+ "recorded on this entry"
569
+ )
570
+ detail_lines.append(
571
+ f"override: coord merge --only {aid} --override-human-required "
572
+ "'<reason>'"
573
+ )
574
+ reason = "\n".join(detail_lines)
575
+ elif not ok:
576
+ reason = entry.error or None
577
+
578
+ return GateDecision(
579
+ gate="merge_queue",
580
+ required=False,
581
+ ok=ok,
582
+ reason=reason,
583
+ state=state or None,
584
+ assignment_id=entry.assignment_id or None,
585
+ )
586
+
587
+
454
588
  def _apply_gate_decision(repo_name: str, issue_number: int) -> GateDecision | None:
455
589
  """The ``"apply"`` :class:`GateDecision` for *(repo_name, issue_number)*,
456
590
  or ``None`` when there is no ``--hold-after`` deploy-gate entry for it in
@@ -741,8 +875,42 @@ def build_gate_report(
741
875
  registry_decisions[gate_name] = decision
742
876
  report.decisions.append(decision)
743
877
 
878
+ # #3445: the REAL, persisted merge-queue row — distinct from the
879
+ # synthetic `entry` above, which always reads state=PENDING (see
880
+ # `_merge_queue_state_decision`'s docstring). Read AFTER the registry
881
+ # gates so it can be reported alongside them, but consulted FIRST below
882
+ # when deciding the merge gate's headline reason: a latched
883
+ # HUMAN_REQUIRED (or SKIPPED, #3445 review) entry is the actual reason
884
+ # nothing is moving, and no amount of review/smoke/registry-gate
885
+ # clearing can unstick it. CONFLICT is deliberately NOT in this set — it
886
+ # self-heals via `dispatch_conflict_fix` (#1474), so it does not outrank
887
+ # the normal review/smoke headline.
888
+ mq_state_decision = _merge_queue_state_decision(
889
+ repo_name, issue_number, winner.assignment_id,
890
+ )
891
+ if mq_state_decision is not None:
892
+ report.decisions.append(mq_state_decision)
893
+
744
894
  merge_blocked_gate: str | None = None
745
- if review_required and not review_ok:
895
+ if mq_state_decision is not None and mq_state_decision.state in (
896
+ "HUMAN_REQUIRED", "SKIPPED",
897
+ ):
898
+ # #3445 review: the full detail (reason, latched-time caveat,
899
+ # override command) is already rendered on the "merge-queue" line
900
+ # `format_gate_report` prints alongside this one — keep the
901
+ # presentation cross-reference ("see the merge-queue line above...")
902
+ # OUT of this data field, since `merge.reason` is also consumed
903
+ # verbatim by non-CLI-rendering readers with no such line above it
904
+ # (`coord.queue_diagnose`'s `_gates()` probe). This field stays a
905
+ # short, state-only headline; `format_gate_report` adds the
906
+ # cross-reference itself, only where the referent actually exists.
907
+ token = (
908
+ HUMAN_REQUIRED_BLOCKED
909
+ if mq_state_decision.state == "HUMAN_REQUIRED"
910
+ else SKIPPED_BLOCKED
911
+ )
912
+ merge_blocked_gate = f"{token} — {mq_state_decision.state}"
913
+ elif review_required and not review_ok:
746
914
  merge_blocked_gate = REVIEW_REQUIRED
747
915
  elif smoke_required and not test_ok:
748
916
  merge_blocked_gate = SMOKE_REQUIRED
@@ -912,6 +1080,29 @@ def format_gate_report(report: GateReport) -> str:
912
1080
  lines.append(f" {test.reason}")
913
1081
  else:
914
1082
  lines.append(f" test : BLOCKED — {test.reason}")
1083
+ # #3445: the REAL, persisted merge-queue row's state — distinct from
1084
+ # the review/test/merge decisions above, which are all evaluated
1085
+ # against a synthetic, never-persisted entry (see
1086
+ # `_merge_queue_state_decision`'s docstring). Only printed when a
1087
+ # row actually exists for this (repo, issue) — the common case for
1088
+ # an issue that never reached the merge queue at all is silence,
1089
+ # same convention as the "apply" line below. A HUMAN_REQUIRED row
1090
+ # gets its full multi-line detail (reason, latched-time caveat,
1091
+ # override command); every other state is a single unadorned line.
1092
+ merge_queue_decision = by_gate.get("merge_queue")
1093
+ if merge_queue_decision is not None:
1094
+ state_label = merge_queue_decision.state or "UNKNOWN"
1095
+ detail_lines = (
1096
+ merge_queue_decision.reason.split("\n")
1097
+ if merge_queue_decision.reason
1098
+ else []
1099
+ )
1100
+ if not detail_lines:
1101
+ lines.append(f" merge-queue : {state_label}")
1102
+ else:
1103
+ lines.append(f" merge-queue : {state_label} — {detail_lines[0]}")
1104
+ for extra in detail_lines[1:]:
1105
+ lines.append(f" {extra}")
915
1106
  # #3273 (S-5 of #3261): any other registry-backed gate (today just
916
1107
  # "uat") renders generically here, in `report.decisions`' own
917
1108
  # insertion order — a gate GATE_REGISTRY grows in the future needs no
@@ -919,7 +1110,7 @@ def format_gate_report(report: GateReport) -> str:
919
1110
  # skipped/inapplicable one (UAT not configured, or an exempt issue)
920
1111
  # gets an explicit reason instead of being silently omitted like it
921
1112
  # was before #3273.
922
- _KNOWN_GATE_LINES = ("review", "test", "merge", "apply")
1113
+ _KNOWN_GATE_LINES = ("review", "test", "merge_queue", "merge", "apply")
923
1114
  for decision in report.decisions:
924
1115
  if decision.gate in _KNOWN_GATE_LINES:
925
1116
  continue
@@ -938,9 +1129,27 @@ def format_gate_report(report: GateReport) -> str:
938
1129
  lines.append(f" {label} : BLOCKED — {decision.reason}")
939
1130
  merge = by_gate.get("merge")
940
1131
  if merge is not None:
941
- lines.append(
942
- " merge : READY" if merge.ok else f" merge : BLOCKED — {merge.reason}"
943
- )
1132
+ if merge.ok:
1133
+ lines.append(" merge : READY")
1134
+ else:
1135
+ lines.append(f" merge : BLOCKED — {merge.reason}")
1136
+ # #3445 review: the cross-reference belongs only in THIS
1137
+ # rendering, right after the "merge-queue" line it actually
1138
+ # points at — not baked into `merge.reason` itself, which
1139
+ # `coord.queue_diagnose`'s `_gates()` probe also surfaces
1140
+ # verbatim with no such line above it.
1141
+ if (
1142
+ merge_queue_decision is not None
1143
+ and merge_queue_decision.state in ("HUMAN_REQUIRED", "SKIPPED")
1144
+ ):
1145
+ lines.append(
1146
+ " (see the merge-queue line above for detail"
1147
+ + (
1148
+ " — the latched time and the override command)"
1149
+ if merge_queue_decision.state == "HUMAN_REQUIRED"
1150
+ else ")"
1151
+ )
1152
+ )
944
1153
  # #3236: only printed when a --hold-after deploy gate actually
945
1154
  # exists for this (repo, issue) — see `_apply_gate_decision`.
946
1155
  apply_ = by_gate.get("apply")
@@ -3809,9 +3809,14 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
3809
3809
  except Exception: # noqa: BLE001
3810
3810
  board, config = None, None
3811
3811
  elif stale_rebase_mismatch:
3812
- # No board/config needed here — a stale-rebase mismatch has
3813
- # no tier-2 escalation path, it goes straight to
3814
- # HUMAN_REQUIRED inside `on_conflict_fix_done`.
3812
+ # #3444: board/config ARE needed here now — a stale-rebase
3813
+ # mismatch escalates to the ORDINARY conflict-fix path
3814
+ # (`_try_ordinary_escalation_after_stale_mismatch`) inside
3815
+ # `on_conflict_fix_done`, not straight to HUMAN_REQUIRED.
3816
+ # Without them that escalation call returns `None`
3817
+ # immediately and this — the operationally dominant path,
3818
+ # per the comment above — would reproduce #3444's exact bug
3819
+ # on every stale-rebase-mismatch it sees.
3815
3820
  progress = entry.get("progress") or {}
3816
3821
  stuck_summary = progress.get("stuck")
3817
3822
  if not stuck_summary and log_path:
@@ -3820,6 +3825,13 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
3820
3825
  stuck_summary = parse_progress(log_path).stuck
3821
3826
  except Exception: # noqa: BLE001
3822
3827
  stuck_summary = None
3828
+ try:
3829
+ from coord.board_service import read_board # noqa: PLC0415
3830
+ from coord.config import load as _load_config # noqa: PLC0415
3831
+ board = read_board()
3832
+ config = _load_config()
3833
+ except Exception: # noqa: BLE001
3834
+ board, config = None, None
3823
3835
 
3824
3836
  on_conflict_fix_done(
3825
3837
  parent_assignment_id=parent_id,
@@ -2978,6 +2978,67 @@ def _try_semantic_escalation(
2978
2978
  return None
2979
2979
 
2980
2980
 
2981
+ def _try_ordinary_escalation_after_stale_mismatch(
2982
+ entry: mq.QueuedMerge,
2983
+ *,
2984
+ board: Board | None,
2985
+ config: Config | None,
2986
+ machine_name: str,
2987
+ stuck_summary: str | None,
2988
+ ) -> "Assignment | None":
2989
+ """Dispatch the ordinary conflict-fix path after a stale-rebase
2990
+ worker's ``stale-rebase-mismatch`` refusal (#3444).
2991
+
2992
+ A ``stale-rebase-mismatch`` verdict means the ``checks_stale`` premise
2993
+ that triggered the stale-rebase dispatch was wrong — the rebase hit a
2994
+ genuine content conflict, not just a moved base. That makes this an
2995
+ ORDINARY conflict, so it deserves the ordinary #241 conflict-fix
2996
+ worker's mechanical/additive attempt (and its own
2997
+ ``SEMANTIC_STUCK_MARKER`` → escalation-or-HUMAN_REQUIRED handling on a
2998
+ second failure) before anything goes to a human — not an immediate
2999
+ HUMAN_REQUIRED, which is what happened before this fix.
3000
+
3001
+ Returns the dispatched Assignment, or ``None`` when the plumbing isn't
3002
+ available or dispatch declined for any of the ordinary reasons (no
3003
+ capable machine, already active, retry cap already consumed by a prior
3004
+ *ordinary* attempt, …) — every ``None`` case falls through to the
3005
+ caller's pre-#3444 HUMAN_REQUIRED behaviour.
3006
+
3007
+ Deliberately does NOT gate on a config flag the way
3008
+ :func:`_try_semantic_escalation` gates on
3009
+ ``pipeline.escalate_semantic_conflicts`` — unlike a semantic escalation
3010
+ to a stronger model, this is just the ordinary conflict-fix path that
3011
+ every other conflict already gets; there is no reason to withhold it
3012
+ here specifically.
3013
+ """
3014
+ if board is None or config is None:
3015
+ return None
3016
+
3017
+ from coord.conflict_fix import dispatch_conflict_fix # noqa: PLC0415
3018
+ from coord.network import fetch_status # noqa: PLC0415
3019
+
3020
+ try:
3021
+ return dispatch_conflict_fix(
3022
+ entry,
3023
+ board,
3024
+ config,
3025
+ prefer_machine=machine_name or None,
3026
+ after_stale_rebase_mismatch=True,
3027
+ stuck_summary=stuck_summary,
3028
+ # #3353: same liveness-aware selection every other call site
3029
+ # here uses — a dead machine with zero active assignments must
3030
+ # not be picked first just because it looks idle on the board.
3031
+ status_fetcher=fetch_status,
3032
+ )
3033
+ except Exception as exc: # noqa: BLE001 — never break reconcile on this
3034
+ import logging # noqa: PLC0415
3035
+ logging.warning(
3036
+ "stale-rebase-mismatch → ordinary conflict-fix escalation "
3037
+ "dispatch failed: %s", exc,
3038
+ )
3039
+ return None
3040
+
3041
+
2981
3042
  def on_conflict_fix_done(
2982
3043
  *,
2983
3044
  parent_assignment_id: str,
@@ -2998,16 +3059,21 @@ def on_conflict_fix_done(
2998
3059
  can surface "manual resolution required", and a comment is posted on
2999
3060
  the underlying issue so the user is notified outside the TUI too.
3000
3061
 
3001
- *stale_rebase_mismatch* (#3349 review): when ``True``, a stale-rebase
3002
- worker (dispatched for ``merge_gate_checks_stale``, not an ordinary
3003
- conflict) correctly refused to push per its own briefing's "When NOT to
3004
- guess" section — its rebase either hit a real conflict marker or
3005
- produced a different patch-id than the pre-rebase branch, so it is not
3006
- a pure content-preserving rebase. This is NOT a SEMANTIC give-up (no
3007
- tier-2 escalation applies — there is nothing to retry with a stronger
3008
- model; the base and this branch genuinely overlap) and lands directly
3009
- on HUMAN_REQUIRED with that reason recorded, mirroring the *semantic*
3010
- handling below but skipping its escalation path entirely.
3062
+ *stale_rebase_mismatch* (#3349 review, escalation added #3444): when
3063
+ ``True``, a stale-rebase worker (dispatched for
3064
+ ``merge_gate_checks_stale``, not an ordinary conflict) correctly
3065
+ refused to push per its own briefing's "When NOT to guess" section —
3066
+ its rebase either hit a real conflict marker or produced a different
3067
+ patch-id than the pre-rebase branch, so it is not a pure
3068
+ content-preserving rebase. That means the *just-stale* premise behind
3069
+ the stale-rebase dispatch was wrong — this is an ORDINARY conflict, so
3070
+ it gets the ordinary #241 conflict-fix worker's mechanical/additive
3071
+ attempt (:func:`_try_ordinary_escalation_after_stale_mismatch`) before
3072
+ anything reaches a human, exactly like any other conflict. Only when
3073
+ THAT dispatch itself declines (no capable machine, already active,
3074
+ retry cap consumed, …) does the entry land on HUMAN_REQUIRED — #3349's
3075
+ safety property (the stale-rebase worker itself never resolves
3076
+ anything) is unaffected either way.
3011
3077
 
3012
3078
  #2566: when *semantic* is ``True`` and the tier-2 escalation didn't
3013
3079
  fire specifically because ``pipeline.escalate_semantic_conflicts`` is
@@ -3058,24 +3124,54 @@ def on_conflict_fix_done(
3058
3124
  )
3059
3125
  failed_entry = entry
3060
3126
  elif stale_rebase_mismatch:
3061
- # #3349 review: a stale-rebase worker's refusal is a
3062
- # correct, deliberate stop — not a give-up to retry with a
3063
- # stronger model — so it goes straight to HUMAN_REQUIRED
3064
- # with the mismatch reason recorded, skipping the SEMANTIC
3065
- # tier-2 escalation path entirely.
3066
- entry.state = mq.HUMAN_REQUIRED
3127
+ # #3444: a stale-rebase worker's refusal means the
3128
+ # "just-stale" premise was wrong — this is a genuine
3129
+ # content conflict, i.e. an ORDINARY conflict, so it gets
3130
+ # the ordinary #241 conflict-fix worker's mechanical
3131
+ # attempt before anything reaches a human (previously this
3132
+ # skipped straight to HUMAN_REQUIRED — #3444's bug).
3067
3133
  detail = stuck_summary or (
3068
3134
  "rebase was not content-preserving (a conflict marker "
3069
3135
  "appeared, or the resulting patch-id differed from the "
3070
3136
  "pre-rebase branch's)"
3071
3137
  )
3072
- entry.error = (
3073
- f"{existing_error}; stale-rebase worker refused to "
3074
- f"push: {detail}. This is a genuine content conflict "
3075
- "against the new base, not a pure rebase — manual "
3076
- "resolution required."
3138
+ fix = _try_ordinary_escalation_after_stale_mismatch(
3139
+ entry,
3140
+ board=board,
3141
+ config=config,
3142
+ machine_name=machine_name,
3143
+ stuck_summary=stuck_summary,
3077
3144
  )
3078
- failed_entry = entry
3145
+ if fix is not None:
3146
+ # Stay in CONFLICT, not HUMAN_REQUIRED — the ordinary
3147
+ # conflict-fix worker is now in flight. If it also
3148
+ # fails (or itself judges the conflict SEMANTIC), this
3149
+ # hook runs again with `stale_rebase_mismatch=False`
3150
+ # and the ordinary/semantic-escalation-or-HUMAN_REQUIRED
3151
+ # logic below applies exactly as it does for any other
3152
+ # conflict.
3153
+ entry.state = mq.CONFLICT
3154
+ entry.error = (
3155
+ f"{existing_error}; stale-rebase worker refused to "
3156
+ f"push: {detail}. Not a stale-base mismatch after "
3157
+ "all — this is a genuine content conflict, "
3158
+ f"escalated to an ordinary conflict-fix (assignment "
3159
+ f"{fix.assignment_id}) on {fix.machine_name}."
3160
+ )
3161
+ else:
3162
+ # The ordinary escalation itself declined (no capable
3163
+ # machine, already active, retry cap already consumed
3164
+ # by a prior ordinary attempt, …) — fall through to
3165
+ # HUMAN_REQUIRED exactly like the pre-#3444 behaviour.
3166
+ entry.state = mq.HUMAN_REQUIRED
3167
+ entry.error = (
3168
+ f"{existing_error}; stale-rebase worker refused to "
3169
+ f"push: {detail}. This is a genuine content conflict "
3170
+ "against the new base, not a pure rebase, and the "
3171
+ "ordinary conflict-fix escalation could not be "
3172
+ "dispatched either — manual resolution required."
3173
+ )
3174
+ failed_entry = entry
3079
3175
  else:
3080
3176
  # #1291: a SEMANTIC give-up gets ONE escalated attempt from a
3081
3177
  # stronger model before the entry is parked. Everything