code-coordinator 0.5.557__tar.gz → 0.5.559__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 (929) hide show
  1. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agent.py +14 -0
  5. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/conflict_fix.py +282 -0
  6. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive_queue.py +33 -3
  7. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/merge_queue.py +79 -1
  8. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notify.py +38 -1
  9. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/reconcile.py +112 -0
  10. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/win_native_bridge.py +217 -25
  11. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent.py +14 -0
  12. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_conflict_fix.py +155 -0
  13. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue.py +58 -1
  14. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_merge_queue.py +78 -0
  15. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile.py +110 -0
  16. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_win_native_bridge.py +197 -41
  17. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.claude/commands/board.md +0 -0
  18. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.claude/commands/complete-session.md +0 -0
  19. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.claude/commands/coordinator.md +0 -0
  20. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/_lib.sh +0 -0
  21. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/post-checkout +0 -0
  22. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/post-commit +0 -0
  23. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.githooks/post-merge +0 -0
  24. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  25. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/coord-ci-acceptance.yml +0 -0
  26. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/workflows/auto-release.yml +0 -0
  27. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/workflows/publish.yml +0 -0
  28. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.github/workflows/test.yml +0 -0
  29. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/.gitignore +0 -0
  30. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/CLAUDE.md +0 -0
  31. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/GOAL.md +0 -0
  32. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/LICENSE +0 -0
  33. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/MANIFEST.in +0 -0
  34. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/README.md +0 -0
  35. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/SOURCES.txt +0 -0
  36. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/dependency_links.txt +0 -0
  37. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/entry_points.txt +0 -0
  38. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/requires.txt +0 -0
  39. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/scm_file_list.json +0 -0
  40. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/code_coordinator.egg-info/top_level.txt +0 -0
  41. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/__init__.py +0 -0
  42. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/_board_mapping.py +0 -0
  43. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/acceptance.py +0 -0
  44. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/acceptance_drivers.py +0 -0
  45. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agent_app.py +0 -0
  46. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agent_update.py +0 -0
  47. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agents/opencode/.gitignore +0 -0
  48. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agents/opencode/agents/work.md +0 -0
  49. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/agents/opencode/routing.jsonc +0 -0
  50. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/approved_work.py +0 -0
  51. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/audit.py +0 -0
  52. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/auto_loop.py +0 -0
  53. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/backup.py +0 -0
  54. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/block_log.py +0 -0
  55. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/board_schema.py +0 -0
  56. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/board_service.py +0 -0
  57. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/board_wire.py +0 -0
  58. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/brain.py +0 -0
  59. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/branch_model.py +0 -0
  60. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/bug_intake.py +0 -0
  61. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/bugbash.py +0 -0
  62. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/cargo_cache.py +0 -0
  63. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_fix.py +0 -0
  64. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_github.py +0 -0
  65. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_gitlab.py +0 -0
  66. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/ci_store.py +0 -0
  67. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/claim.py +0 -0
  68. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/claude_setup_token.py +0 -0
  69. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/cli.py +0 -0
  70. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/client.py +0 -0
  71. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/codegen.py +0 -0
  72. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/__init__.py +0 -0
  73. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/_common.py +0 -0
  74. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/acceptance.py +0 -0
  75. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/agent_ops.py +0 -0
  76. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/audit.py +0 -0
  77. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/backup.py +0 -0
  78. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/bugbash.py +0 -0
  79. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/chat.py +0 -0
  80. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/ci.py +0 -0
  81. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/codegen.py +0 -0
  82. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/dispatch.py +0 -0
  83. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/dispatch_workers.py +0 -0
  84. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/dr.py +0 -0
  85. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/drive.py +0 -0
  86. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/drive_queue.py +0 -0
  87. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/gate_a.py +0 -0
  88. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/gates.py +0 -0
  89. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/issues.py +0 -0
  90. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/lifecycle.py +0 -0
  91. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/machine.py +0 -0
  92. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/merge.py +0 -0
  93. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/milestone.py +0 -0
  94. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/plan_followup.py +0 -0
  95. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/plans.py +0 -0
  96. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/portal.py +0 -0
  97. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/pr.py +0 -0
  98. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/release.py +0 -0
  99. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/repo.py +0 -0
  100. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/report.py +0 -0
  101. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/review.py +0 -0
  102. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/scorecard.py +0 -0
  103. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/sessions.py +0 -0
  104. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/setup.py +0 -0
  105. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/status.py +0 -0
  106. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/store_migrate.py +0 -0
  107. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/terminal.py +0 -0
  108. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/test_gate.py +0 -0
  109. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/commands/tui.py +0 -0
  110. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/comments.py +0 -0
  111. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/config.py +0 -0
  112. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/config_reload.py +0 -0
  113. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/confirm_test.py +0 -0
  114. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dao.py +0 -0
  115. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/__init__.py +0 -0
  116. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/fixture.py +0 -0
  117. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/index.html +0 -0
  118. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/server.py +0 -0
  119. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dashboard/terminal.py +0 -0
  120. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/db.py +0 -0
  121. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dead_end.py +0 -0
  122. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/decomposition_chat.py +0 -0
  123. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/README.md +0 -0
  124. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-agent.service +0 -0
  125. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-backup.service +0 -0
  126. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-backup.timer +0 -0
  127. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-db-backup.service +0 -0
  128. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-db-backup.sh +0 -0
  129. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-db-backup.timer +0 -0
  130. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-dr-verify.service +0 -0
  131. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-dr-verify.timer +0 -0
  132. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-drive-queue.service +0 -0
  133. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-drive-queue.timer +0 -0
  134. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-failure-notify.service +0 -0
  135. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-fleet-watchdog.service +0 -0
  136. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  137. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-notify.service +0 -0
  138. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-notify.timer +0 -0
  139. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-propagate.service +0 -0
  140. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-propagate.timer +0 -0
  141. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-window.service +0 -0
  142. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-release-window.timer +0 -0
  143. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-serve.service +0 -0
  144. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-web-dist-build.service +0 -0
  145. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-web-dist-build.timer +0 -0
  146. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy/coord-web.service +0 -0
  147. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy_manifest.py +0 -0
  148. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deploy_units.py +0 -0
  149. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deprecation_telemetry.py +0 -0
  150. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/deps.py +0 -0
  151. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/diagnose.py +0 -0
  152. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dispatch.py +0 -0
  153. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dispatch_liveness.py +0 -0
  154. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dist_name.py +0 -0
  155. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dr_promote.py +0 -0
  156. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/dr_verify.py +0 -0
  157. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive.py +0 -0
  158. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive_sessions_snapshot.py +0 -0
  159. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/drive_state.py +0 -0
  160. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/events.py +0 -0
  161. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/failure_class.py +0 -0
  162. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/failure_classifier.py +0 -0
  163. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/filelock.py +0 -0
  164. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/fleet_config_health.py +0 -0
  165. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/forge_availability.py +0 -0
  166. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/freshness.py +0 -0
  167. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gate_a.py +0 -0
  168. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gate_b.py +0 -0
  169. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gate_snapshot.py +0 -0
  170. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gates.py +0 -0
  171. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gen_board_fixture.py +0 -0
  172. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/github_ops.py +0 -0
  173. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/github_throttle.py +0 -0
  174. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/goal.py +0 -0
  175. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/graph_health.py +0 -0
  176. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/gtk_native_driver.py +0 -0
  177. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/__init__.py +0 -0
  178. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/aggregate.py +0 -0
  179. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/__init__.py +0 -0
  180. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/_ci_pin.py +0 -0
  181. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/agent_install.py +0 -0
  182. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/cargo_targets.py +0 -0
  183. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/claude_binary.py +0 -0
  184. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/config_drift.py +0 -0
  185. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  186. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/coord_web_ci_pin.py +0 -0
  187. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/deploy_lane_facts.py +0 -0
  188. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/disk.py +0 -0
  189. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_board.py +0 -0
  190. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  191. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_phantom.py +0 -0
  192. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/fleet_unit_drift.py +0 -0
  193. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/graph.py +0 -0
  194. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/graphify_cli.py +0 -0
  195. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/index_lock.py +0 -0
  196. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/issues_sync_staleness.py +0 -0
  197. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/local_machine_identity.py +0 -0
  198. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/plan_usage.py +0 -0
  199. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/pr_churn.py +0 -0
  200. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/release_cordon.py +0 -0
  201. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/repo_state.py +0 -0
  202. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/spawned_coord.py +0 -0
  203. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/stalled_pipeline.py +0 -0
  204. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/timer_active.py +0 -0
  205. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/toolchain.py +0 -0
  206. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/unit_drift.py +0 -0
  207. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/unit_enablement.py +0 -0
  208. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/wedged_drive_queue.py +0 -0
  209. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/checks/worktrees.py +0 -0
  210. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/cli.py +0 -0
  211. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/context.py +0 -0
  212. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/fleet_snapshot.py +0 -0
  213. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/models.py +0 -0
  214. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/pypi.py +0 -0
  215. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/registry.py +0 -0
  216. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/render.py +0 -0
  217. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/health/units.py +0 -0
  218. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/hooks.py +0 -0
  219. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/housekeeping.py +0 -0
  220. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/interactive.py +0 -0
  221. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/invariant_alarms.py +0 -0
  222. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/issue_store.py +0 -0
  223. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/issues_sync_status.py +0 -0
  224. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/liveness_auditor.py +0 -0
  225. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/mac_native_driver.py +0 -0
  226. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_fault.py +0 -0
  227. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_metrics.py +0 -0
  228. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_onboard.py +0 -0
  229. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_pause.py +0 -0
  230. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/machine_stats.py +0 -0
  231. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_chat.py +0 -0
  232. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_dispatch.py +0 -0
  233. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_gate.py +0 -0
  234. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/milestone_order.py +0 -0
  235. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/mock_author.py +0 -0
  236. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/models.py +0 -0
  237. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/network.py +0 -0
  238. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/new_issue_chat.py +0 -0
  239. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/__init__.py +0 -0
  240. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/baseline.py +0 -0
  241. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/cli.py +0 -0
  242. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/collect.py +0 -0
  243. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/digest.py +0 -0
  244. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/models.py +0 -0
  245. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/predicate.py +0 -0
  246. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/service.py +0 -0
  247. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/store.py +0 -0
  248. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/notifier/transport.py +0 -0
  249. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/openapi.py +0 -0
  250. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/overlap_fence.py +0 -0
  251. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/overlap_predict.py +0 -0
  252. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/parentage.py +0 -0
  253. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/parentage_github.py +0 -0
  254. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/pipeline.py +0 -0
  255. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/plan_parser.py +0 -0
  256. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/plans.py +0 -0
  257. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/platform_paths.py +0 -0
  258. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/portal_bridge.py +0 -0
  259. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/portal_store.py +0 -0
  260. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/portal_sync.py +0 -0
  261. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/pr_body_lint.py +0 -0
  262. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/prereqs.py +0 -0
  263. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/progress.py +0 -0
  264. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/__init__.py +0 -0
  265. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/base.py +0 -0
  266. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/claude.py +0 -0
  267. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/claude_pty.py +0 -0
  268. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/providers/opencode.py +0 -0
  269. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/queue_diagnose.py +0 -0
  270. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/reconcile_tick.py +0 -0
  271. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/refine_chat.py +0 -0
  272. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_cordon.py +0 -0
  273. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_gate.py +0 -0
  274. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_propagate.py +0 -0
  275. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_verify.py +0 -0
  276. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/release_window.py +0 -0
  277. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/repo_dormancy.py +0 -0
  278. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/repo_edit.py +0 -0
  279. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/repo_onboard.py +0 -0
  280. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/reports.py +0 -0
  281. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/rest_schema.py +0 -0
  282. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/restart_cmd.py +0 -0
  283. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/revalidate.py +0 -0
  284. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/review.py +0 -0
  285. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/scorecard.py +0 -0
  286. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/self_health.py +0 -0
  287. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/serve_app.py +0 -0
  288. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  289. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  290. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  291. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  292. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  293. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/portal-followup/SKILL.md +0 -0
  294. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/release-now/SKILL.md +0 -0
  295. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  296. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  297. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/skills/update-issue/SKILL.md +0 -0
  298. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/smoke.py +0 -0
  299. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/smoke_tags.py +0 -0
  300. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/spend_ceiling.py +0 -0
  301. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/split_work.py +0 -0
  302. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/sql.py +0 -0
  303. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/stage_projection.py +0 -0
  304. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/state.py +0 -0
  305. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/store_migrate.py +0 -0
  306. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/store_parity.py +0 -0
  307. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/templates/deploy-cloudflare.node.yml +0 -0
  308. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_author.py +0 -0
  309. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_chat.py +0 -0
  310. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_orchestrator.py +0 -0
  311. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/test_report.py +0 -0
  312. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/tui_pty_driver.py +0 -0
  313. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/tui_release.py +0 -0
  314. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/uat_checks.py +0 -0
  315. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/usage.py +0 -0
  316. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/usage_limits.py +0 -0
  317. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/usage_rollup.py +0 -0
  318. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/win_native_driver.py +0 -0
  319. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coord/worker_events.py +0 -0
  320. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/coordinator.example.yml +0 -0
  321. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-agent.service +0 -0
  322. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-backup.service +0 -0
  323. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-backup.timer +0 -0
  324. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-db-backup.service +0 -0
  325. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-db-backup.sh +0 -0
  326. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-db-backup.timer +0 -0
  327. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-dr-verify.service +0 -0
  328. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-dr-verify.timer +0 -0
  329. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-drive-queue.service +0 -0
  330. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-drive-queue.timer +0 -0
  331. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-failure-notify.service +0 -0
  332. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-failure-notify.sh +0 -0
  333. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-fleet-watchdog.service +0 -0
  334. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-fleet-watchdog.timer +0 -0
  335. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-notify.service +0 -0
  336. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-notify.timer +0 -0
  337. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-propagate.service +0 -0
  338. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-propagate.timer +0 -0
  339. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-window.service +0 -0
  340. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-release-window.timer +0 -0
  341. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-serve.service +0 -0
  342. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-dist-build.service +0 -0
  343. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-dist-build.sh +0 -0
  344. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-dist-build.timer +0 -0
  345. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web-rollback.sh +0 -0
  346. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/coord-web.service +0 -0
  347. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/deploy/node-shim.sh +0 -0
  348. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_TUI_CI.md +0 -0
  349. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  350. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_WEB_CI.md +0 -0
  351. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_COORD_WEB_DIST.md +0 -0
  352. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  353. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/AGENT_OPERATIONS.md +0 -0
  354. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ARCHITECTURE.md +0 -0
  355. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ARCH_SECURITY_GATES.md +0 -0
  356. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/COCKPIT.md +0 -0
  357. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CONTROL_CENTER.md +0 -0
  358. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/COST_DISCIPLINE.md +0 -0
  359. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CROSS_PLATFORM.md +0 -0
  360. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CUSTOMER_FACING_APPS.md +0 -0
  361. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/CUSTOMER_PORTAL.md +0 -0
  362. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/DATA_STORE_SELECTION.md +0 -0
  363. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/DISASTER_RECOVERY.md +0 -0
  364. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/DRIVE_QUEUE.md +0 -0
  365. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/EPHEMERAL_WORKERS.md +0 -0
  366. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/FORGE_MIGRATION.md +0 -0
  367. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/GRAPHIFY_SETUP.md +0 -0
  368. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ISSUE_GUIDANCE.md +0 -0
  369. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/MAC_MINI.md +0 -0
  370. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  371. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/NOTIFIER.md +0 -0
  372. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/OPENCODE_VERIFICATION.md +0 -0
  373. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/OPERATING_GOTCHAS.md +0 -0
  374. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/OPERATOR_GUIDES.md +0 -0
  375. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/ORACLE_LOOP.md +0 -0
  376. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/PHONE_WEBAPP.md +0 -0
  377. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/PIPELINE_V2.md +0 -0
  378. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/PLATFORM_EVOLUTION.md +0 -0
  379. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/SECOND_BACKEND.md +0 -0
  380. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/STORE_SERVICE.md +0 -0
  381. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  382. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/WEB_CONTROL_CENTER.md +0 -0
  383. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/WSL_WINDOWS_WORKER.md +0 -0
  384. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/README.md +0 -0
  385. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/_tokens.css +0 -0
  386. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/issue-detail.html +0 -0
  387. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/pipeline-narrow.html +0 -0
  388. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/docs/mocks/web/pipeline-wide.html +0 -0
  389. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/graphify-out/.gitignore +0 -0
  390. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/install-agent.sh +0 -0
  391. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/pyproject.toml +0 -0
  392. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/audit_review_verdict_overrides.py +0 -0
  393. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  394. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/build-worker-image.sh +0 -0
  395. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/coordinator-machine.py +0 -0
  396. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/dr-down.sh +0 -0
  397. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/dr-up.sh +0 -0
  398. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/epic-down.sh +0 -0
  399. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/epic-up.sh +0 -0
  400. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/preflight.sh +0 -0
  401. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/provision-server.sh +0 -0
  402. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/provision-worker.sh +0 -0
  403. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  404. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  405. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/throwaway-vm.sh +0 -0
  406. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/azure-workers/verify-github-token.sh +0 -0
  407. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/check_gh_argv_containment.py +0 -0
  408. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/codegen.py +0 -0
  409. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-test-runner.sh +0 -0
  410. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  411. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  412. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  413. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  414. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/coord-venv-rollback.sh +0 -0
  415. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/drive-batch.sh +0 -0
  416. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/extract-coord-tui.sh +0 -0
  417. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/fleet_watchdog.py +0 -0
  418. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/gen_board_fixture.py +0 -0
  419. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/gen_mock_index.py +0 -0
  420. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/lib/provision-core.sh +0 -0
  421. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/next_release_tag.py +0 -0
  422. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/provision-machine.sh +0 -0
  423. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/run_tests_in_populated_home.sh +0 -0
  424. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/run_tests_without_gh.sh +0 -0
  425. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/setup-macmini.sh +0 -0
  426. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/smoke_437_interactive.py +0 -0
  427. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify-provision-noble.sh +0 -0
  428. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify_878_review_capture.py +0 -0
  429. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify_release_published.py +0 -0
  430. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/scripts/verify_release_wheel.py +0 -0
  431. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/setup.cfg +0 -0
  432. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/SMOKE_SET.md +0 -0
  433. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/__init__.py +0 -0
  434. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/conftest.py +0 -0
  435. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/contract.md +0 -0
  436. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/manifest.yml +0 -0
  437. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  438. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  439. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/contract.md +0 -0
  440. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  441. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  442. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/manifest.yml +0 -0
  443. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  444. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-51/tsconfig.json +0 -0
  445. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  446. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/backends.py +0 -0
  447. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/conftest.py +0 -0
  448. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/board-pipeline-basic.json +0 -0
  449. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  450. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  451. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  452. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  453. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/all_pass.json +0 -0
  454. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  455. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/mixed_fail.json +0 -0
  456. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  457. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  458. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/skip.json +0 -0
  459. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/playwright/truncated.json +0 -0
  460. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  461. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  462. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  463. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  464. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
  465. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  466. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  467. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  468. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  469. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_acceptance.py +0 -0
  470. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_acceptance_drivers.py +0 -0
  471. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_api_error.py +0 -0
  472. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_app.py +0 -0
  473. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_branch_base.py +0 -0
  474. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_branch_capture.py +0 -0
  475. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_config_free_1712.py +0 -0
  476. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_deploy_units_endpoint.py +0 -0
  477. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_dirty_worktree.py +0 -0
  478. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  479. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_graph_self_heal.py +0 -0
  480. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_health_h3.py +0 -0
  481. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_idle_restart.py +0 -0
  482. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_push_failure.py +0 -0
  483. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_reap.py +0 -0
  484. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_repos_and_pull.py +0 -0
  485. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_restart_services_endpoint.py +0 -0
  486. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_skills_self_heal.py +0 -0
  487. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_startup_diagnostics.py +0 -0
  488. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_update.py +0 -0
  489. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_update_bluegreen.py +0 -0
  490. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_usage_limit.py +0 -0
  491. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_agent_zero_commit.py +0 -0
  492. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ambient_home_isolation.py +0 -0
  493. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_capability_reroute_3241.py +0 -0
  494. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_dependency_busy_2804.py +0 -0
  495. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_reject_plan.py +0 -0
  496. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approve_usage_gate.py +0 -0
  497. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approved_work_2532.py +0 -0
  498. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_approved_work_2996.py +0 -0
  499. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_assignment_already_recorded_daemon.py +0 -0
  500. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_audit_log.py +0 -0
  501. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_audit_outcome.py +0 -0
  502. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_audit_query.py +0 -0
  503. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_auto_loop.py +0 -0
  504. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_auto_release_publish_2035.py +0 -0
  505. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_backend_selection.py +0 -0
  506. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_backup.py +0 -0
  507. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_base_checkout_restore.py +0 -0
  508. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_block_log.py +0 -0
  509. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_cap_762.py +0 -0
  510. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_fixture.py +0 -0
  511. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_read_path.py +0 -0
  512. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_schema.py +0 -0
  513. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_service.py +0 -0
  514. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_state.py +0 -0
  515. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_board_wire.py +0 -0
  516. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_brain.py +0 -0
  517. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_branch_model.py +0 -0
  518. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_bug_intake.py +0 -0
  519. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_bugbash.py +0 -0
  520. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_build_worker_image_env_update.py +0 -0
  521. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cargo_cache.py +0 -0
  522. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_check_gh_argv_containment.py +0 -0
  523. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_acceptance_gate_1950.py +0 -0
  524. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_fix.py +0 -0
  525. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_github.py +0 -0
  526. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_gitlab.py +0 -0
  527. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_parity_2091.py +0 -0
  528. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_ci_store.py +0 -0
  529. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_claim.py +0 -0
  530. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_claude_md_budget.py +0 -0
  531. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_claude_setup_token.py +0 -0
  532. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_acceptance.py +0 -0
  533. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign.py +0 -0
  534. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  535. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_interactive_remote.py +0 -0
  536. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_provider.py +0 -0
  537. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  538. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_audit.py +0 -0
  539. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_chat_continue.py +0 -0
  540. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_ci.py +0 -0
  541. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_codegen.py +0 -0
  542. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_decide.py +0 -0
  543. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_capability_rules.py +0 -0
  544. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_config_provenance.py +0 -0
  545. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_forge_availability.py +0 -0
  546. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_graph.py +0 -0
  547. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_self.py +0 -0
  548. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_diagnose_test_coverage.py +0 -0
  549. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor.py +0 -0
  550. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor_config_free_1801.py +0 -0
  551. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  552. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  553. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_drive.py +0 -0
  554. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_drive_queue.py +0 -0
  555. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_escalate.py +0 -0
  556. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_fix_headless_review.py +0 -0
  557. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_gate_a.py +0 -0
  558. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_install_drift.py +0 -0
  559. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_install_skills.py +0 -0
  560. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_comment.py +0 -0
  561. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_create_label.py +0 -0
  562. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_reopen.py +0 -0
  563. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issue_view_list.py +0 -0
  564. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_issues.py +0 -0
  565. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_merge.py +0 -0
  566. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_assign.py +0 -0
  567. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_capture.py +0 -0
  568. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_chat_add_child.py +0 -0
  569. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_dispatch.py +0 -0
  570. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_gate_b.py +0 -0
  571. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_gate_c.py +0 -0
  572. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_order.py +0 -0
  573. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  574. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_milestone_ship.py +0 -0
  575. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_network.py +0 -0
  576. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_new_issue_chat.py +0 -0
  577. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_plans.py +0 -0
  578. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_portal.py +0 -0
  579. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_pr.py +0 -0
  580. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_pull_artifact.py +0 -0
  581. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_queue.py +0 -0
  582. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_reattach_sessions.py +0 -0
  583. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_refine_board.py +0 -0
  584. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_release_preflight.py +0 -0
  585. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_release_propagate.py +0 -0
  586. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_release_window.py +0 -0
  587. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_repo_2220.py +0 -0
  588. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  589. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_scorecard.py +0 -0
  590. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_serve_store_backend_3084.py +0 -0
  591. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_set_review_findings.py +0 -0
  592. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_advisory_terminal.py +0 -0
  593. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_contested_tag.py +0 -0
  594. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_invariant_alarms.py +0 -0
  595. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_machine_fault.py +0 -0
  596. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_merge_queue.py +0 -0
  597. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_provider.py +0 -0
  598. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_retried_3340.py +0 -0
  599. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_review_finalizing.py +0 -0
  600. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_supervisor_3366.py +0 -0
  601. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_test_failed_tag.py +0 -0
  602. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_status_usage_limit.py +0 -0
  603. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_sync_comments_873.py +0 -0
  604. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_test_plan.py +0 -0
  605. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_track.py +0 -0
  606. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_tui_update.py +0 -0
  607. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cli_wait.py +0 -0
  608. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client.py +0 -0
  609. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client_base_install.py +0 -0
  610. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client_config_cache_atomic_3052.py +0 -0
  611. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_client_resource_migration_1946.py +0 -0
  612. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_commands_common.py +0 -0
  613. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_comments.py +0 -0
  614. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_completion_summary.py +0 -0
  615. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config.py +0 -0
  616. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_acceptance.py +0 -0
  617. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_audit.py +0 -0
  618. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_drift_check.py +0 -0
  619. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_effective.py +0 -0
  620. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_pricing.py +0 -0
  621. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  622. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_config_usage_gate.py +0 -0
  623. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_confirm_test.py +0 -0
  624. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_conflict_fix_semantic.py +0 -0
  625. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  626. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test.py +0 -0
  627. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  628. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_baseline.py +0 -0
  629. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_populated_home.py +0 -0
  630. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_routing.py +0 -0
  631. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_test_runner_toolchain.py +0 -0
  632. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_uat.py +0 -0
  633. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coord_web_sse_restart_live.py +0 -0
  634. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_coordinator_machine.py +0 -0
  635. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_cross_platform_imports.py +0 -0
  636. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dao.py +0 -0
  637. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard.py +0 -0
  638. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_api.py +0 -0
  639. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_fixture.py +0 -0
  640. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_server.py +0 -0
  641. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_terminal.py +0 -0
  642. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dashboard_terminal_live.py +0 -0
  643. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_db.py +0 -0
  644. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dead_end.py +0 -0
  645. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_decomposition_chat.py +0 -0
  646. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_coord_db_backup.py +0 -0
  647. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_coord_web_dist.py +0 -0
  648. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_coord_web_rollback.py +0 -0
  649. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_db_backup_unit.py +0 -0
  650. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_drive_queue_unit.py +0 -0
  651. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_failure_notify_unit.py +0 -0
  652. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_manifest.py +0 -0
  653. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_notify_unit.py +0 -0
  654. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_units_lane.py +0 -0
  655. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deploy_web_unit.py +0 -0
  656. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deprecation_telemetry.py +0 -0
  657. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_deps.py +0 -0
  658. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_diagnose.py +0 -0
  659. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch.py +0 -0
  660. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch_liveness.py +0 -0
  661. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch_target_validation.py +0 -0
  662. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dispatch_workers.py +0 -0
  663. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dist_name.py +0 -0
  664. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_done_housekeeping.py +0 -0
  665. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dr_azure_scripts.py +0 -0
  666. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dr_promote.py +0 -0
  667. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_dr_verify.py +0 -0
  668. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive.py +0 -0
  669. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_machine_fault.py +0 -0
  670. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_blocked_rendering.py +0 -0
  671. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_launch_argv.py +0 -0
  672. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_max_parallel_config.py +0 -0
  673. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  674. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_roll_pending.py +0 -0
  675. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  676. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_sessions_snapshot.py +0 -0
  677. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_state.py +0 -0
  678. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_drive_tmux.py +0 -0
  679. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_epic_up_capability_detection.py +0 -0
  680. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  681. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_epic_up_image_provenance.py +0 -0
  682. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_errors.py +0 -0
  683. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_events.py +0 -0
  684. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_failure_class.py +0 -0
  685. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_failure_classifier.py +0 -0
  686. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_filelock.py +0 -0
  687. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  688. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fix_escalation_classifier.py +0 -0
  689. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fix_of_force_override.py +0 -0
  690. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_config_health.py +0 -0
  691. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_health_probes.py +0 -0
  692. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_health_snapshot.py +0 -0
  693. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_fleet_watchdog.py +0 -0
  694. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_forge_availability.py +0 -0
  695. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_freshness.py +0 -0
  696. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gate_a.py +0 -0
  697. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gate_b.py +0 -0
  698. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gate_snapshot_staleness.py +0 -0
  699. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gates.py +0 -0
  700. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  701. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gen_mock_index.py +0 -0
  702. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_generated_rust_fixture.py +0 -0
  703. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_generated_rust_requests.py +0 -0
  704. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_generated_types_fixture.py +0 -0
  705. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_github_ops.py +0 -0
  706. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_github_throttle.py +0 -0
  707. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_goal.py +0 -0
  708. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_graph_health.py +0 -0
  709. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_graph_selfheal_absent_2237.py +0 -0
  710. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_gtk_native_driver.py +0 -0
  711. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_handoff.py +0 -0
  712. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_checks.py +0 -0
  713. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_cli.py +0 -0
  714. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_cli_graph.py +0 -0
  715. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_config.py +0 -0
  716. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_context.py +0 -0
  717. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_coord_tui_ci_pin.py +0 -0
  718. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_coord_web_ci_pin.py +0 -0
  719. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_deploy_lane_facts.py +0 -0
  720. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_fix.py +0 -0
  721. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_incident_regression.py +0 -0
  722. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_issues_sync_staleness.py +0 -0
  723. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_pr_churn.py +0 -0
  724. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_pypi.py +0 -0
  725. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_registry.py +0 -0
  726. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_release_cordon_probe.py +0 -0
  727. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_timer_active.py +0 -0
  728. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_toolchain.py +0 -0
  729. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_unit_drift.py +0 -0
  730. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_unit_enablement.py +0 -0
  731. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_health_wedged_drive_queue.py +0 -0
  732. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_hooks.py +0 -0
  733. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_housekeeping.py +0 -0
  734. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_human_attended_437.py +0 -0
  735. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_init.py +0 -0
  736. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_install_agent_capabilities_3515.py +0 -0
  737. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_install_agent_venv_2911.py +0 -0
  738. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_install_agent_wsl_bridge_3515.py +0 -0
  739. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_integration.py +0 -0
  740. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive.py +0 -0
  741. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_briefing_echo.py +0 -0
  742. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_pane_log_2541.py +0 -0
  743. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_prefill_state.py +0 -0
  744. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_session_relaunch.py +0 -0
  745. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_test_verdict_backstop.py +0 -0
  746. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_token_attribution.py +0 -0
  747. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_interactive_worktree.py +0 -0
  748. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_invariant_alarms.py +0 -0
  749. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_issue_store_seam.py +0 -0
  750. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_issues_sync_status.py +0 -0
  751. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_liveness_auditor.py +0 -0
  752. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_liveness_notify.py +0 -0
  753. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_lock_contention_ratchet.py +0 -0
  754. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_mac_native_driver.py +0 -0
  755. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_fault.py +0 -0
  756. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_metrics.py +0 -0
  757. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_onboard.py +0 -0
  758. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_pause.py +0 -0
  759. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_machine_stats.py +0 -0
  760. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_merge_verify.py +0 -0
  761. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_chat.py +0 -0
  762. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_dispatch.py +0 -0
  763. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_gate.py +0 -0
  764. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_order.py +0 -0
  765. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_milestone_seam.py +0 -0
  766. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_mock_author.py +0 -0
  767. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_model_tiering.py +0 -0
  768. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_models.py +0 -0
  769. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_models_config_labels.py +0 -0
  770. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_needs_attention.py +0 -0
  771. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_network.py +0 -0
  772. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_new_issue_chat.py +0 -0
  773. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_next_release_tag.py +0 -0
  774. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_node_shim.py +0 -0
  775. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_baseline.py +0 -0
  776. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_cli.py +0 -0
  777. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_collect.py +0 -0
  778. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_config.py +0 -0
  779. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_drive_seam.py +0 -0
  780. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_isolation.py +0 -0
  781. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_predicate.py +0 -0
  782. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_quiet_hours.py +0 -0
  783. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notifier_service.py +0 -0
  784. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notify.py +0 -0
  785. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_notify_drain.py +0 -0
  786. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_openapi.py +0 -0
  787. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_operational_defaults.py +0 -0
  788. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_overlap_fence.py +0 -0
  789. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_overlap_predict.py +0 -0
  790. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_packaged_deploy_units.py +0 -0
  791. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_parentage.py +0 -0
  792. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_paste_landed.py +0 -0
  793. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  794. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_pipeline.py +0 -0
  795. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_followup_approve_plan_command.py +0 -0
  796. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_followup_pr_command.py +0 -0
  797. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_followup_review_command.py +0 -0
  798. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_only.py +0 -0
  799. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_plan_parser.py +0 -0
  800. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_platform_paths.py +0 -0
  801. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_bridge.py +0 -0
  802. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_config.py +0 -0
  803. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_store.py +0 -0
  804. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_portal_sync.py +0 -0
  805. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_pr_body_lint.py +0 -0
  806. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_prereqs.py +0 -0
  807. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_production_db_guard.py +0 -0
  808. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_progress.py +0 -0
  809. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_provider_seam.py +0 -0
  810. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_providers.py +0 -0
  811. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_providers_config_labels.py +0 -0
  812. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_providers_pty.py +0 -0
  813. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_provision_core.py +0 -0
  814. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_provision_machine.py +0 -0
  815. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_py_rust_mirror_inventory.py +0 -0
  816. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_quiet_hours.py +0 -0
  817. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_quiet_hours_store_2146.py +0 -0
  818. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reap_merged_sessions.py +0 -0
  819. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reap_stale_interactive_tick.py +0 -0
  820. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_branch.py +0 -0
  821. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_completions.py +0 -0
  822. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  823. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_merges.py +0 -0
  824. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_no_agent_record.py +0 -0
  825. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_tick.py +0 -0
  826. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reconcile_usage_limit_done.py +0 -0
  827. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_refine_chat.py +0 -0
  828. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_2101.py +0 -0
  829. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  830. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_deadlock_2240.py +0 -0
  831. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  832. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_cordon_stuck_2490.py +0 -0
  833. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_gate.py +0 -0
  834. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_propagate.py +0 -0
  835. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_propagate_threshold.py +0 -0
  836. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_roll_between_legs_2854.py +0 -0
  837. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_roll_window_handoff.py +0 -0
  838. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_unified_1242.py +0 -0
  839. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_verify.py +0 -0
  840. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_release_window.py +0 -0
  841. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_remote_auto_prune.py +0 -0
  842. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_remote_interactive_reaper.py +0 -0
  843. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_add.py +0 -0
  844. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_dormancy.py +0 -0
  845. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_edit_2220.py +0 -0
  846. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_graph_fleet_2237.py +0 -0
  847. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_max_parallel_3423.py +0 -0
  848. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_repo_onboard_2220.py +0 -0
  849. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_report_result_push.py +0 -0
  850. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_reports.py +0 -0
  851. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_restart_cmd.py +0 -0
  852. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry.py +0 -0
  853. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry_advisory_1606.py +0 -0
  854. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry_escalation_classify_3360.py +0 -0
  855. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_retry_type_1636.py +0 -0
  856. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_revalidate.py +0 -0
  857. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review.py +0 -0
  858. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_end_review_without_verdict.py +0 -0
  859. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_parse_failure_diagnostic.py +0 -0
  860. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_reaffirm.py +0 -0
  861. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_state.py +0 -0
  862. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_verdict_backstop.py +0 -0
  863. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_verdict_override_audit.py +0 -0
  864. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_verdict_relay.py +0 -0
  865. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_review_zero_commits.py +0 -0
  866. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_scoped_review_wiring.py +0 -0
  867. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_scorecard.py +0 -0
  868. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_self_health.py +0 -0
  869. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve.py +0 -0
  870. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve_app.py +0 -0
  871. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve_app_board_trim.py +0 -0
  872. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_serve_rest_routes.py +0 -0
  873. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_session.py +0 -0
  874. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_slice_issue_attribution.py +0 -0
  875. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke.py +0 -0
  876. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  877. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke_live_checkout_restore.py +0 -0
  878. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_smoke_workflow.py +0 -0
  879. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_spend_ceiling.py +0 -0
  880. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_spend_ceiling_coordinator.py +0 -0
  881. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_split.py +0 -0
  882. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_split_work.py +0 -0
  883. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_sql_dialect.py +0 -0
  884. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_sqlite_connect_ratchet.py +0 -0
  885. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stage_projection.py +0 -0
  886. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stale_busy_reviewer_697.py +0 -0
  887. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stalled_pipeline.py +0 -0
  888. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_state.py +0 -0
  889. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_state_review_findings_daemon.py +0 -0
  890. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_status_fleet_footer.py +0 -0
  891. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stop_1567.py +0 -0
  892. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_store_contract.py +0 -0
  893. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_store_migrate.py +0 -0
  894. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stuck.py +0 -0
  895. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  896. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_terminal_command.py +0 -0
  897. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_author.py +0 -0
  898. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_chat.py +0 -0
  899. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_orchestrator.py +0 -0
  900. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_report.py +0 -0
  901. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_verdict_parsing.py +0 -0
  902. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_test_verdict_transcript_floor.py +0 -0
  903. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_text_io_encoding_audit.py +0 -0
  904. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_thin_client_board_audit.py +0 -0
  905. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_thin_client_config_load_1080.py +0 -0
  906. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_thin_client_daemon_routing_906.py +0 -0
  907. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_throwaway_vm.py +0 -0
  908. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_tmux_host.py +0 -0
  909. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_tmux_session.py +0 -0
  910. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_transcript_floor.py +0 -0
  911. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_tui_pty_driver.py +0 -0
  912. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_uat_checks.py +0 -0
  913. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_usage.py +0 -0
  914. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_usage_limits.py +0 -0
  915. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_usage_rollup.py +0 -0
  916. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_venv_live_install_2121.py +0 -0
  917. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_version_single_source.py +0 -0
  918. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_watch.py +0 -0
  919. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_win_native_driver.py +0 -0
  920. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  921. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_env_venv_isolation.py +0 -0
  922. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_events.py +0 -0
  923. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_image_pin_sync.py +0 -0
  924. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_safety.py +0 -0
  925. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worker_test_scoping.py +0 -0
  926. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worktree.py +0 -0
  927. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  928. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/tests/test_write_parity.py +0 -0
  929. {code_coordinator-0.5.557 → code_coordinator-0.5.559}/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.557
3
+ Version: 0.5.559
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.557
3
+ Version: 0.5.559
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.557",
2
+ "tag": "0.5.559",
3
3
  "distance": 0,
4
- "node": "g5a69304a322aacce476e65ea0317e7f9da47fae3",
4
+ "node": "gdb53efc5211a6f969b2f3a6c6686b3b561821626",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-10-02"
@@ -3828,6 +3828,20 @@ gate (not posted to GitHub by you — never run `gh` commands): a `partial`/ \
3828
3828
  comment on the issue quoting what remains, instead of auto-closing work \
3829
3829
  that still has a reported bug live.
3830
3830
 
3831
+ #3522: if you are going to declare `partial` or `investigation`, your \
3832
+ commit messages must reference this issue with `Refs #N` — never `Fix \
3833
+ #N`/`Fixes #N`/`Closes #N`/`Resolves #N`, even when that is this repo's \
3834
+ own commit convention for a fully-resolving change. GitHub scans commit \
3835
+ messages for closing keywords independently of the PR body and auto-closes \
3836
+ the issue the moment the commit lands on the base branch, regardless of \
3837
+ what your `ISSUE_RESOLUTION:` line says — the coordinator's merge gate can \
3838
+ rewrite the PR body but cannot rewrite history in a `gh`-only wire layer, \
3839
+ so it refuses to merge a `partial`/`investigation` PR whose commits still \
3840
+ carry a closing keyword. If you already wrote a commit this way before \
3841
+ deciding on `partial`/`investigation`, reword it (`git commit --amend` for \
3842
+ the most recent commit, `git rebase -i` for an earlier one) to say `Refs \
3843
+ #N` before you push.
3844
+
3831
3845
  #252: before exiting, emit a SMOKE_TESTS block telling the human what to \
3832
3846
  manually verify. You changed the code; you know what's worth poking.
3833
3847
 
@@ -53,6 +53,20 @@ distinct :data:`ALREADY_UPSTREAM_MARKER` for the superseded case, so
53
53
  :func:`coord.reconcile.on_conflict_fix_done` can park the entry with
54
54
  accurate "nothing to merge" text instead of escalating a conflict that
55
55
  does not exist.
56
+
57
+ #3522: a fourth no-conflict-expected shape, dispatched directly by
58
+ ``coord.merge_queue.process()`` the moment its own
59
+ ``issue_resolution_closing_keyword_in_commit`` gate fires (#3502) — a
60
+ commit message on the branch carries a GitHub closing keyword for this
61
+ entry's own issue even though the PR is marked ``ISSUE_RESOLUTION:
62
+ partial``/``investigation``. ``dispatch_conflict_fix(..., reword_commit=
63
+ True)`` sends a worker authorized ONLY to reword that commit's wording
64
+ (never its content), verified content-preserving the same way the
65
+ stale-rebase worker verifies its own premise — see
66
+ :func:`build_reword_commit_briefing`. Before this, nothing ever remedied
67
+ that refusal: the merge gate correctly kept refusing forever, and the
68
+ drive-queue's own resume sweep kept burning its budget relaunching into
69
+ the identical, unfixable-by-relaunch block (claude-coordinator#3519).
56
70
  """
57
71
 
58
72
  from __future__ import annotations
@@ -734,6 +748,240 @@ def already_upstream_verdict_in_text(text: str | None) -> bool:
734
748
  return ALREADY_UPSTREAM_MARKER in _decode_worker_text(text)
735
749
 
736
750
 
751
+ # ── #3522: reword-commit (issue_resolution_closing_keyword_in_commit) ──────
752
+ #
753
+ # `coord.merge_queue.process()`'s `issue_resolution_closing_keyword_in_commit`
754
+ # gate refuses to merge a branch whose PR is marked `ISSUE_RESOLUTION:
755
+ # partial`/`investigation` but whose commit message(s) still carry a
756
+ # GitHub closing keyword (`Fix`/`Fixes`/`Closes`/`Resolves #N`) for that
757
+ # SAME issue — GitHub auto-closes the issue from the commit message on
758
+ # merge regardless of what the PR body or the coordinator's own
759
+ # `close_issue()` chokepoint say. Unlike the PR-body half of the same gate
760
+ # (#1196/#1318), there is no `gh`-only rewrite for a commit message already
761
+ # on the branch — only a local rebase that REWORDS it can fix this, and
762
+ # nothing ever dispatched that rebase, so every such PR deadlocked:
763
+ # `coord merge` refuses every attempt, the drive-queue's own resume sweep
764
+ # (`coord.drive_queue._reconcile_blocked`) saw the same unfixable refusal
765
+ # and burned its resume budget relaunching into it, and only an operator
766
+ # force-push ever cleared it (claude-coordinator#3519).
767
+ #
768
+ # This section gives that gate a remedy worker, dispatched by
769
+ # `coord.merge_queue.process()` itself the moment the gate fires (see that
770
+ # module): a message-only rewrite, narrower even than the stale-rebase
771
+ # briefing above — it is authorized to change ONLY the wording of a commit
772
+ # SUBJECT that references this entry's own issue with a closing keyword,
773
+ # never the tree. Verified the same way the stale-rebase worker verifies a
774
+ # "just stale" premise: a content-addressed `git patch-id --stable` (and
775
+ # the working tree itself) must be byte-identical before and after the
776
+ # reword — if it isn't, something touched content, not just the message,
777
+ # and the worker refuses rather than force-push a silently-changed diff out
778
+ # from under a review that already approved a different tree.
779
+
780
+ # Marker a reword-commit worker's STUCK: line starts with when the rewrite
781
+ # was not content-preserving — a patch-id or tree mismatch, or a rebase
782
+ # conflict encountered while rewording. Same convention as
783
+ # STALE_REBASE_MISMATCH_MARKER/SEALED_SCOPE_STUCK_MARKER: a fixed,
784
+ # machine-parseable string, not prose.
785
+ REWORD_MISMATCH_MARKER = "coord:conflict=reword-mismatch"
786
+
787
+ # Title prefix for a reword-commit conflict-fix dispatch — visible in the
788
+ # TUI Pipeline row so an operator can tell at a glance this used the
789
+ # narrow, message-only briefing rather than the ordinary conflict-fix one.
790
+ REWORD_COMMIT_FIX_TITLE_PREFIX = "[reword-commit-fix]"
791
+
792
+ REWORD_COMMIT_FIX_SYSTEM_PROMPT = """\
793
+ You are a Claude Code conflict-fix worker. This branch's PR is marked \
794
+ `ISSUE_RESOLUTION: partial` or `ISSUE_RESOLUTION: investigation` — it does \
795
+ NOT fully resolve its issue — but one of its own commit messages still \
796
+ uses a GitHub closing keyword (`Fix`/`Fixes`/`Closes`/`Resolves #N`) for \
797
+ that same issue. GitHub auto-closes the issue from the commit message on \
798
+ merge, independent of the PR body, so this blocks the merge until the \
799
+ wording is fixed. Your job is a MESSAGE-ONLY rewrite: change the wording, \
800
+ never the content.
801
+
802
+ Rules:
803
+ - The coordinator denies `gh` and `git push --force` for this worker. \
804
+ Don't try to use them — the harness will reject the call.
805
+ - Stay on the worker's branch — do NOT push to main / develop / target.
806
+ - Use git push --force-with-lease (NOT --force).
807
+ - Rewrite ONLY the commit subject/body wording that uses a closing keyword \
808
+ for this entry's own issue number — e.g. `Fix #N: ...` / `Fixes #N ...` / \
809
+ `Closes #N` / `Resolves #N` becomes `Refs #N: ...` (same text otherwise). \
810
+ Leave every other commit, and every other word of the ones you touch, \
811
+ untouched.
812
+ - Before rewriting, record the branch's content fingerprint: `git diff \
813
+ <target-branch>...HEAD | git patch-id --stable`, and its tree: `git \
814
+ diff <target-branch> HEAD` (expect no output — nothing ahead of the merge \
815
+ base besides this branch's own already-landed changes).
816
+ - Use `git rebase -i <target-branch>` with `reword` on the affected \
817
+ commit(s) (or, for a simple one-commit rewrite, `git commit --amend`), \
818
+ editing ONLY the wording described above.
819
+ - After rewriting, confirm BOTH fingerprints are UNCHANGED: the patch-id \
820
+ must match exactly, and `git diff <target-branch> HEAD` must produce the \
821
+ IDENTICAL output as before. A rewording that changes either means \
822
+ something touched content, not just the message — DO NOT push.
823
+ - If a conflict marker appears during the rebase, or either fingerprint \
824
+ differs after the reword, DO NOT push. Stop and end your turn with a \
825
+ STUCK: line that starts with the exact marker \
826
+ `coord:conflict=reword-mismatch`, e.g.
827
+ STUCK: coord:conflict=reword-mismatch — patch-id before <hash>, after \
828
+ <hash> differ
829
+ The coordinator reads that marker from your transcript, not your process \
830
+ exit code (which you cannot control), and escalates to a human rather than \
831
+ force-pushing a diff review never saw.
832
+
833
+ Progress reporting:
834
+ - After each significant step (fingerprint recorded, reword done, \
835
+ fingerprint verified, pushed), output:
836
+ STATUS: [what you just did] → [what you're about to do] → [confidence]
837
+ - If you stop, output the STUCK: line described above and wait for \
838
+ guidance.\
839
+ """
840
+
841
+
842
+ def build_reword_commit_briefing(
843
+ *,
844
+ entry: QueuedMerge,
845
+ repo_path: str,
846
+ test_command: str | None,
847
+ ) -> str:
848
+ """Briefing for a conflict-fix dispatched against the #3522
849
+ `issue_resolution_closing_keyword_in_commit` merge-gate refusal — a
850
+ message-only rewrite of whichever commit(s) use a GitHub closing
851
+ keyword for *entry.issue_number*, verified content-preserving (patch-id
852
+ and tree both unchanged) the same way :func:`build_stale_rebase_briefing`
853
+ verifies its "just stale" premise.
854
+
855
+ *test_command* is accepted for signature symmetry with the other
856
+ ``build_*_briefing`` functions, but a pure message rewrite changes no
857
+ code, so this briefing does not ask the worker to re-run it — unlike
858
+ :func:`build_conflict_fix_briefing`/:func:`build_stale_rebase_briefing`,
859
+ both of which DO change (or might change) tracked files.
860
+ """
861
+ lines: list[str] = [
862
+ f"# Reword commit for ISSUE_RESOLUTION: ambiguous closing keyword — "
863
+ f"{entry.repo_github} branch `{entry.branch}`",
864
+ "",
865
+ f"`{entry.branch}`'s PR is marked `ISSUE_RESOLUTION: partial` or "
866
+ "`ISSUE_RESOLUTION: investigation` — it does NOT fully resolve "
867
+ f"#{entry.issue_number} — but a commit message on this branch still "
868
+ f"uses a GitHub closing keyword for #{entry.issue_number}.",
869
+ f"Reason: {entry.error or 'issue_resolution_closing_keyword_in_commit'}",
870
+ "",
871
+ f"Issue: #{entry.issue_number} — {entry.issue_title}",
872
+ "",
873
+ "## Where you are",
874
+ "",
875
+ f"You are already in a dedicated git worktree checked out on "
876
+ f"`{entry.branch}` — the coordinator created it for you. Work HERE.",
877
+ "",
878
+ f"Do **NOT** `cd {repo_path}` (that is the machine's shared base "
879
+ "checkout) and do NOT `git checkout` / `git switch` anywhere. Leaving "
880
+ f"the base checkout parked on `{entry.branch}` breaks every later "
881
+ "dispatch against that branch on this machine (#1694).",
882
+ "",
883
+ "## Steps",
884
+ "",
885
+ "1. `git fetch origin`",
886
+ f"2. Record the pre-rewrite fingerprint: `git diff "
887
+ f"origin/{entry.target_branch}...HEAD | git patch-id --stable` and "
888
+ f"confirm `git diff origin/{entry.target_branch} HEAD` is what you "
889
+ "expect it to be (whatever it is now, it must be IDENTICAL after "
890
+ "the reword).",
891
+ f"3. Find the commit(s) whose subject or body references "
892
+ f"`#{entry.issue_number}` with a closing keyword — `Fix`/`Fixes`/"
893
+ f"`Fixed`/`Close`/`Closes`/`Closed`/`Resolve`/`Resolves`/`Resolved` "
894
+ f"immediately followed by `#{entry.issue_number}` — and reword ONLY "
895
+ "that wording to `Refs`, via `git rebase -i "
896
+ f"origin/{entry.target_branch}` (`reword` on each such commit) or "
897
+ "`git commit --amend` if it is the tip commit. Change nothing else "
898
+ "in the message and nothing in the diff.",
899
+ f"4. Re-check the fingerprint from step 2: `git diff "
900
+ f"origin/{entry.target_branch}...HEAD | git patch-id --stable` must "
901
+ f"match EXACTLY, and `git diff origin/{entry.target_branch} HEAD` "
902
+ "must be byte-identical to step 2's. If either differs, see "
903
+ '"When NOT to guess" below.',
904
+ f"5. `git push --force-with-lease origin {entry.branch}`",
905
+ "6. Exit 0 if push succeeds; non-zero otherwise.",
906
+ "",
907
+ "## When NOT to guess",
908
+ "",
909
+ "This dispatch is authorized for a MESSAGE-ONLY rewrite — never a "
910
+ "content change. If a conflict marker appears during the rebase, "
911
+ "or either fingerprint from step 4 differs from step 2's, DO NOT "
912
+ "push: something touched content, not just wording, and this "
913
+ "worker's narrow authorization does not cover resolving that. Stop "
914
+ "and end your turn with a `STUCK:` line that begins with the exact "
915
+ f"marker `{REWORD_MISMATCH_MARKER}` and then names what happened, "
916
+ "e.g.",
917
+ "",
918
+ f" STUCK: {REWORD_MISMATCH_MARKER} — patch-id before <hash>, "
919
+ "after <hash> differ",
920
+ "",
921
+ "The coordinator reads that marker from your transcript, not your "
922
+ "process exit code (which you cannot control), and escalates to a "
923
+ f"human on issue #{entry.issue_number} rather than force-pushing a "
924
+ "diff the review that already approved this branch never saw.",
925
+ "",
926
+ "You will NOT use `gh` or `git push --force` — both are denied by "
927
+ "the harness. The coordinator owns PR retries and issue posting.",
928
+ ]
929
+ return "\n".join(lines)
930
+
931
+
932
+ def reword_mismatch_verdict_in_text(text: str | None) -> bool:
933
+ """True when a reword-commit conflict-fix worker's log carries the
934
+ :data:`REWORD_MISMATCH_MARKER` — i.e. it refused to push because the
935
+ rewrite was not content-preserving (a real conflict, or a patch-id/tree
936
+ mismatch). Mirrors :func:`stale_rebase_mismatch_verdict_in_text`.
937
+ """
938
+ if not text:
939
+ return False
940
+ return REWORD_MISMATCH_MARKER in _decode_worker_text(text)
941
+
942
+
943
+ def detect_reword_mismatch(
944
+ *,
945
+ log_path: str | None = None,
946
+ host: str | None = None,
947
+ assignment_id: str | None = None,
948
+ port: int = AGENT_PORT,
949
+ timeout: float = 15.0,
950
+ ) -> bool:
951
+ """True when a finished reword-commit conflict-fix worker refused to
952
+ push because its rewrite was not content-preserving (caught in step 4
953
+ of :func:`build_reword_commit_briefing`).
954
+
955
+ Mirrors :func:`detect_stale_rebase_mismatch` exactly (same
956
+ local-log-then-agent-endpoint lookup, same best-effort ``False`` on any
957
+ read/transport failure) but reads for :data:`REWORD_MISMATCH_MARKER` via
958
+ :func:`reword_mismatch_verdict_in_text`.
959
+ """
960
+ if log_path:
961
+ try:
962
+ from pathlib import Path # noqa: PLC0415
963
+
964
+ p = Path(log_path)
965
+ if p.exists():
966
+ raw = p.read_text(encoding="utf-8", errors="replace")
967
+ if reword_mismatch_verdict_in_text(raw):
968
+ return True
969
+ except OSError:
970
+ pass
971
+
972
+ if host and assignment_id:
973
+ try:
974
+ resp = httpx.get(
975
+ f"http://{host}:{port}/logs/{assignment_id}", timeout=timeout
976
+ )
977
+ resp.raise_for_status()
978
+ return reword_mismatch_verdict_in_text(resp.text)
979
+ except (httpx.HTTPError, httpx.TimeoutException):
980
+ return False
981
+
982
+ return False
983
+
984
+
737
985
  def build_conflict_fix_briefing(
738
986
  *,
739
987
  entry: QueuedMerge,
@@ -1418,6 +1666,7 @@ def dispatch_conflict_fix(
1418
1666
  stuck_summary: str | None = None,
1419
1667
  stale_rebase: bool = False,
1420
1668
  after_stale_rebase_mismatch: bool = False,
1669
+ reword_commit: bool = False,
1421
1670
  status_fetcher: Callable[..., StatusResult] | None = None,
1422
1671
  machine_pick_out: "list[ConflictFixMachinePick] | None" = None,
1423
1672
  ) -> Assignment | None:
@@ -1540,6 +1789,26 @@ def dispatch_conflict_fix(
1540
1789
  unaffected: the stale-rebase worker itself still never resolves
1541
1790
  anything — only this ordinary worker (or its own semantic-escalation
1542
1791
  tier) may.
1792
+
1793
+ ``reword_commit=True`` (#3522) dispatches the remedy for a merge-gate
1794
+ refusal recorded as ``issue_resolution_closing_keyword_in_commit``
1795
+ (``coord.merge_queue.process()``'s own gate, fired the moment it sees
1796
+ that refusal — no separate sweep call site needed) — a commit message
1797
+ on the branch carries a GitHub closing keyword for this entry's own
1798
+ issue even though the PR is marked ``ISSUE_RESOLUTION: partial``/
1799
+ ``investigation``. Uses :func:`build_reword_commit_briefing` instead of
1800
+ the ordinary briefing: narrower even than the stale-rebase one, it is
1801
+ authorized ONLY to reword the offending commit message(s) — never to
1802
+ change content — and verifies that with the same patch-id/tree
1803
+ fingerprint technique :func:`build_stale_rebase_briefing` uses to prove
1804
+ its own "just stale" premise. A mismatch (real content change, or a
1805
+ rebase conflict) refuses — STUCK, retry cap consumed exactly like any
1806
+ other conflict-fix failure — rather than force-pushing a diff the
1807
+ review that already approved this branch never saw. Goes through the
1808
+ SAME retry-cap check as the ordinary (non-``semantic``) path above — a
1809
+ reword that recurs against the same error after a prior attempt
1810
+ escalates to a human exactly like a recurring mechanical conflict
1811
+ would.
1543
1812
  """
1544
1813
  if semantic:
1545
1814
  if has_prior_semantic_escalation(board, entry.assignment_id):
@@ -1555,6 +1824,7 @@ def dispatch_conflict_fix(
1555
1824
  sealed_author = (
1556
1825
  not semantic
1557
1826
  and not stale_rebase
1827
+ and not reword_commit
1558
1828
  and entry.assignment_type in SEALED_PATH_AUTHOR_TYPES
1559
1829
  )
1560
1830
 
@@ -1610,6 +1880,14 @@ def dispatch_conflict_fix(
1610
1880
  )
1611
1881
  system_prompt = STALE_REBASE_FIX_SYSTEM_PROMPT
1612
1882
  title = f"{STALE_REBASE_FIX_TITLE_PREFIX} {entry.issue_title}"
1883
+ elif reword_commit:
1884
+ briefing = build_reword_commit_briefing(
1885
+ entry=entry,
1886
+ repo_path=repo_path,
1887
+ test_command=repo.test_command,
1888
+ )
1889
+ system_prompt = REWORD_COMMIT_FIX_SYSTEM_PROMPT
1890
+ title = f"{REWORD_COMMIT_FIX_TITLE_PREFIX} {entry.issue_title}"
1613
1891
  elif sealed_author:
1614
1892
  briefing = build_sealed_manifest_conflict_briefing(
1615
1893
  entry=entry,
@@ -1765,6 +2043,10 @@ def dispatch_conflict_fix(
1765
2043
  # worker's mismatch refusal — same title/briefing either way,
1766
2044
  # so this is the only durable trace of which path led here.
1767
2045
  "after_stale_rebase_mismatch": after_stale_rebase_mismatch,
2046
+ # #3522: same reasoning — distinguishes the message-only reword
2047
+ # remedy from every other conflict-fix flavour without
2048
+ # re-deriving it from the title prefix.
2049
+ "reword_commit": reword_commit,
1768
2050
  },
1769
2051
  )
1770
2052
 
@@ -329,7 +329,32 @@ PARK_STALE_SECONDS = 45 * 60.0
329
329
  # the narrower predicate `coord.commands.drive_queue` uses to also stop its
330
330
  # OWN independent auto-dispatch (the stale-rebase conflict-fix revalidation)
331
331
  # from re-firing against a row that has already given up this way.
332
- _PERMANENT_BLOCK_MARKERS: tuple[str, ...] = ("(#1844)", "(#2019)", "(#2972)")
332
+ #
333
+ # #3522: `(#3522)` joined this tuple for a FOURTH shape, distinct from the
334
+ # three above in one way — it IS actively remedied, just never by relaunching
335
+ # a whole drive session. `coord.merge_queue.process()`'s own
336
+ # `issue_resolution_closing_keyword_in_commit` gate refuses to merge a branch
337
+ # whose PR is marked `ISSUE_RESOLUTION: partial`/`investigation` but whose
338
+ # commit message(s) still carry a GitHub closing keyword for that same issue
339
+ # — and, since #3522, dispatches a message-only reword-commit worker
340
+ # (`coord.conflict_fix.dispatch_conflict_fix(..., reword_commit=True)`) the
341
+ # moment it fires. Before that worker existed, a drive that exhausted its
342
+ # merge-attempt budget against this refusal (`_die`'s "merge attempted N
343
+ # times without landing", embedding this module's own diagnostic text
344
+ # verbatim) died into `blocked`, and this sweep's live-gate re-check — which
345
+ # has no way to observe "a commit got reworded on another machine", only
346
+ # whether the merge gate currently reads clear — kept reading the SAME
347
+ # refusal as "unlucky, re-check later" and burned its resume budget
348
+ # relaunching into it (claude-coordinator#3519's exact deadlock: three
349
+ # identical refusals, `resumes=1/3`, `2/3`, `3/3`, then stuck). The actual
350
+ # remedy runs entirely OUTSIDE this relaunch loop — a dedicated worker,
351
+ # dispatched from the merge gate itself, that force-pushes once it has
352
+ # verified the reword changed nothing but wording — so there is nothing for
353
+ # a drive-session relaunch to contribute here either; it can only duplicate
354
+ # spend while the real remedy is already in flight. See
355
+ # `coord.merge_queue.process`'s `issue_resolution_closing_keyword_in_commit`
356
+ # handling for where the marker's text originates.
357
+ _PERMANENT_BLOCK_MARKERS: tuple[str, ...] = ("(#1844)", "(#2019)", "(#2972)", "(#3522)")
333
358
 
334
359
 
335
360
  def is_fix_round_ceiling_reason(reason: str | None) -> bool:
@@ -380,8 +405,13 @@ def is_fix_round_ceiling_blocked(state: str | None, last_reason: str | None) ->
380
405
 
381
406
 
382
407
  def is_permanent_block_reason(text: str | None) -> bool:
383
- """Whether *text* names a PERMANENT cause of `blocked` — #2230's sweep
384
- must never re-check these; relaunching cannot change either outcome.
408
+ """Whether *text* names a cause of `blocked` that #2230's sweep must
409
+ never re-check — **relaunching the drive session cannot change the
410
+ outcome**, whether that is because the block is truly permanent
411
+ (#1844/#2019/#2972) or because, #3522, the real remedy already runs
412
+ entirely outside this sweep's relaunch loop (a dedicated reword-commit
413
+ worker dispatched straight from the merge gate) and a resume here could
414
+ only duplicate that spend, never substitute for it.
385
415
 
386
416
  Marker-based, the same convention `coord.gate_a.is_gate_a_refusal_reason`
387
417
  uses for the analogous Gate-A classification: cheap, and correct even
@@ -7307,6 +7307,18 @@ def process(
7307
7307
  an ``epic_closing_keyword_in_commit_forced`` warning event is still
7308
7308
  emitted — the override is never silent.
7309
7309
 
7310
+ #3522: the identical commit-message shape for THIS entry's own issue
7311
+ (``issue_resolution_closing_keyword_in_commit`` — a `partial`/
7312
+ `investigation` ``ISSUE_RESOLUTION:`` verdict contradicted by its own
7313
+ commit message) is, unlike the epic case above, actually remedied: the
7314
+ moment the refusal fires, *board* and *config* permitting, this
7315
+ dispatches a message-only reword-commit worker
7316
+ (:func:`coord.conflict_fix.dispatch_conflict_fix` with
7317
+ ``reword_commit=True``) so a future `coord merge` attempt can clear the
7318
+ refusal without an operator force-push. The merge itself still refuses
7319
+ THIS attempt either way — the dispatch is fire-and-forget, never
7320
+ awaited inline.
7321
+
7310
7322
  Mutates `items` in place; the caller saves the queue after.
7311
7323
  """
7312
7324
  events: list[MergeEvent] = []
@@ -8558,7 +8570,9 @@ def process(
8558
8570
  f"GitHub would auto-close the issue on merge regardless of the "
8559
8571
  f"PR body (#3502). Reword the commit message(s) to 'refs #N' "
8560
8572
  f"and push, or pass --force-merge to merge anyway (the issue "
8561
- f"WILL still auto-close)."
8573
+ f"WILL still auto-close). The coordinator dispatches an "
8574
+ f"automatic reword-commit worker for this (#3522); resuming "
8575
+ f"a drive session cannot fix it on its own."
8562
8576
  )
8563
8577
  if force_merge:
8564
8578
  events.append(MergeEvent(
@@ -8569,6 +8583,70 @@ def process(
8569
8583
  events.append(MergeEvent(
8570
8584
  entry, "issue_resolution_closing_keyword_in_commit", msg,
8571
8585
  ))
8586
+ # #3522: nothing ever remedied this refusal before — a
8587
+ # worker's own commit convention (e.g. `Fix #N: ...`)
8588
+ # deadlocked every retry, and the drive-queue's own
8589
+ # resume sweep (`coord.drive_queue._reconcile_blocked`)
8590
+ # burned its resume budget relaunching into the
8591
+ # identical, unfixable-by-relaunch block
8592
+ # (claude-coordinator#3519). Dispatch the narrow,
8593
+ # message-only remedy the instant the gate fires, right
8594
+ # here — the SAME dispatcher #241/#3349 already use for
8595
+ # the mechanical/stale-CI shapes, so this is one more
8596
+ # caller of an existing worker, not a new mechanism.
8597
+ # Best-effort: *board*/*config* are only ``None`` for a
8598
+ # caller that never wired merge-gate state through in
8599
+ # the first place (dry runs, some unit tests), and a
8600
+ # dispatch failure (no machine, agent unreachable, …)
8601
+ # must never take down the merge refusal it's trying to
8602
+ # remedy.
8603
+ if board is not None and config is not None:
8604
+ # #3522 review (non-blocking): align with every other
8605
+ # `dispatch_conflict_fix` call site
8606
+ # (`commands/merge.py`'s `_machine_for_assignment`,
8607
+ # `notify.py`'s `prefer_machine=work.machine_name`) —
8608
+ # prefer the original worker's machine (it already
8609
+ # has the repo/branch checked out), opt into the
8610
+ # #3353 live-liveness check via `status_fetcher` (so
8611
+ # a machine that merely LOOKS idle because it's
8612
+ # offline isn't picked), and capture a rich decline
8613
+ # reason via `machine_pick_out` instead of the bare
8614
+ # `fix is None` the original code silently swallowed.
8615
+ from coord.conflict_fix import ( # noqa: PLC0415
8616
+ describe_conflict_fix_decline,
8617
+ dispatch_conflict_fix,
8618
+ )
8619
+ from coord.network import fetch_status # noqa: PLC0415
8620
+
8621
+ pick_out: list = []
8622
+ fix = None
8623
+ try:
8624
+ prefer = None
8625
+ target = board.find_by_id(entry.assignment_id)
8626
+ if target is not None:
8627
+ prefer = target.machine_name
8628
+
8629
+ fix = dispatch_conflict_fix(
8630
+ entry, board, config, reword_commit=True,
8631
+ prefer_machine=prefer,
8632
+ status_fetcher=fetch_status,
8633
+ machine_pick_out=pick_out,
8634
+ )
8635
+ except Exception: # noqa: BLE001
8636
+ fix = None
8637
+ if fix is not None:
8638
+ events.append(MergeEvent(
8639
+ entry, "issue_resolution_reword_dispatched",
8640
+ f"dispatched a reword-commit worker to "
8641
+ f"{fix.machine_name} for #{entry.issue_number} "
8642
+ f"(#3522)",
8643
+ ))
8644
+ else:
8645
+ events.append(MergeEvent(
8646
+ entry, "conflict_fix_dispatch_declined",
8647
+ "reword-commit dispatch declined: "
8648
+ + describe_conflict_fix_decline(pick_out),
8649
+ ))
8572
8650
  continue # #3502: refuse — never merge a branch that will
8573
8651
  # auto-close an issue marked not-yet-resolved via a commit
8574
8652
  # message we can't rewrite.
@@ -4034,10 +4034,21 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
4034
4034
  # checked when semantic is False too) and route it to its own
4035
4035
  # `already_upstream` arm, which never escalates to the ordinary
4036
4036
  # conflict-fix path and never says "genuine content conflict".
4037
+ # #3522: the same clean-exit ambiguity applies to a reword-commit
4038
+ # dispatch (`dispatch_conflict_fix(..., reword_commit=True)`, used
4039
+ # for `issue_resolution_closing_keyword_in_commit`) — its briefing
4040
+ # tells the worker to stop and NOT push when the rewrite isn't
4041
+ # content-preserving. Check `REWORD_MISMATCH_MARKER` last (mutually
4042
+ # exclusive with the other three, so only checked when none of them
4043
+ # fired) and route it to its own `reword_mismatch` arm, which — like
4044
+ # `already_upstream` — never escalates to the ordinary conflict-fix
4045
+ # path (that worker's broader content-touching authorization is
4046
+ # exactly what this narrow dispatch was scoped to avoid).
4037
4047
  parent_id = record.get("review_of_assignment_id")
4038
4048
  if parent_id:
4039
4049
  from coord.conflict_fix import ( # noqa: PLC0415
4040
4050
  detect_already_upstream,
4051
+ detect_reword_mismatch,
4041
4052
  detect_semantic_conflict,
4042
4053
  detect_stale_rebase_mismatch,
4043
4054
  )
@@ -4060,6 +4071,7 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
4060
4071
  # not "genuine conflict") whenever both would otherwise apply.
4061
4072
  already_upstream = False
4062
4073
  stale_rebase_mismatch = False
4074
+ reword_mismatch = False
4063
4075
  if not semantic:
4064
4076
  try:
4065
4077
  already_upstream = detect_already_upstream(
@@ -4078,6 +4090,15 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
4078
4090
  )
4079
4091
  except Exception: # noqa: BLE001
4080
4092
  stale_rebase_mismatch = False
4093
+ if not stale_rebase_mismatch:
4094
+ try:
4095
+ reword_mismatch = detect_reword_mismatch(
4096
+ log_path=log_path,
4097
+ host=host,
4098
+ assignment_id=transition.assignment_id,
4099
+ )
4100
+ except Exception: # noqa: BLE001
4101
+ reword_mismatch = False
4081
4102
 
4082
4103
  stuck_summary: str | None = None
4083
4104
  board = None
@@ -4139,6 +4160,20 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
4139
4160
  config = _load_config()
4140
4161
  except Exception: # noqa: BLE001
4141
4162
  board, config = None, None
4163
+ elif reword_mismatch:
4164
+ # #3522: no escalation dispatch happens for this verdict
4165
+ # either (see the module-level comment above), so board/
4166
+ # config aren't strictly needed — but grab the stuck summary
4167
+ # the same way so `on_conflict_fix_done`'s HUMAN_REQUIRED
4168
+ # text is specific.
4169
+ progress = entry.get("progress") or {}
4170
+ stuck_summary = progress.get("stuck")
4171
+ if not stuck_summary and log_path:
4172
+ try:
4173
+ from coord.progress import parse_progress # noqa: PLC0415
4174
+ stuck_summary = parse_progress(log_path).stuck
4175
+ except Exception: # noqa: BLE001
4176
+ stuck_summary = None
4142
4177
 
4143
4178
  on_conflict_fix_done(
4144
4179
  parent_assignment_id=parent_id,
@@ -4146,10 +4181,12 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
4146
4181
  machine_name=transition.machine_name,
4147
4182
  succeeded=not semantic
4148
4183
  and not already_upstream
4149
- and not stale_rebase_mismatch,
4184
+ and not stale_rebase_mismatch
4185
+ and not reword_mismatch,
4150
4186
  semantic=semantic,
4151
4187
  already_upstream=already_upstream,
4152
4188
  stale_rebase_mismatch=stale_rebase_mismatch,
4189
+ reword_mismatch=reword_mismatch,
4153
4190
  board=board,
4154
4191
  config=config,
4155
4192
  stuck_summary=stuck_summary,