code-coordinator 0.5.256__tar.gz → 0.5.257__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 (867) hide show
  1. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/drive_queue.py +52 -16
  5. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/drive.py +9 -2
  6. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/drive_queue.py +121 -8
  7. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/models.py +25 -0
  8. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_drive_queue.py +97 -0
  9. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_queue.py +173 -0
  10. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.claude/commands/board.md +0 -0
  11. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.claude/commands/complete-session.md +0 -0
  12. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.claude/commands/coordinator.md +0 -0
  13. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.githooks/_lib.sh +0 -0
  14. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.githooks/post-checkout +0 -0
  15. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.githooks/post-commit +0 -0
  16. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.githooks/post-merge +0 -0
  17. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  18. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/coord-ci-acceptance.yml +0 -0
  19. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/workflows/auto-release.yml +0 -0
  20. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/workflows/cargo-test.yml +0 -0
  21. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/workflows/publish.yml +0 -0
  22. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/workflows/release-tui.yml +0 -0
  23. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.github/workflows/test.yml +0 -0
  24. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/.gitignore +0 -0
  25. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/CLAUDE.md +0 -0
  26. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/GOAL.md +0 -0
  27. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/LICENSE +0 -0
  28. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/MANIFEST.in +0 -0
  29. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/README.md +0 -0
  30. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/SOURCES.txt +0 -0
  31. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/dependency_links.txt +0 -0
  32. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/entry_points.txt +0 -0
  33. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/requires.txt +0 -0
  34. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/scm_file_list.json +0 -0
  35. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/code_coordinator.egg-info/top_level.txt +0 -0
  36. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/__init__.py +0 -0
  37. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/_board_mapping.py +0 -0
  38. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/acceptance.py +0 -0
  39. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/acceptance_drivers.py +0 -0
  40. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/agent.py +0 -0
  41. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/agent_app.py +0 -0
  42. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/agent_update.py +0 -0
  43. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/agents/opencode/.gitignore +0 -0
  44. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/agents/opencode/agents/work.md +0 -0
  45. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/agents/opencode/routing.jsonc +0 -0
  46. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/approved_work.py +0 -0
  47. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/audit.py +0 -0
  48. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/auto_loop.py +0 -0
  49. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/block_log.py +0 -0
  50. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/board_bool_guard.py +0 -0
  51. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/board_schema.py +0 -0
  52. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/board_service.py +0 -0
  53. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/board_wire.py +0 -0
  54. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/brain.py +0 -0
  55. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/branch_model.py +0 -0
  56. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/bug_intake.py +0 -0
  57. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/cargo_cache.py +0 -0
  58. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/ci_fix.py +0 -0
  59. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/ci_github.py +0 -0
  60. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/ci_gitlab.py +0 -0
  61. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/ci_store.py +0 -0
  62. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/claim.py +0 -0
  63. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/cli.py +0 -0
  64. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/client.py +0 -0
  65. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/__init__.py +0 -0
  66. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/_common.py +0 -0
  67. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/acceptance.py +0 -0
  68. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/agent_ops.py +0 -0
  69. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/audit.py +0 -0
  70. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/chat.py +0 -0
  71. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/dispatch.py +0 -0
  72. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/dispatch_workers.py +0 -0
  73. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/drive.py +0 -0
  74. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/gate_a.py +0 -0
  75. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/gates.py +0 -0
  76. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/issues.py +0 -0
  77. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/lifecycle.py +0 -0
  78. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/merge.py +0 -0
  79. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/milestone.py +0 -0
  80. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/plan_followup.py +0 -0
  81. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/plans.py +0 -0
  82. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/portal.py +0 -0
  83. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/pr.py +0 -0
  84. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/release.py +0 -0
  85. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/repo.py +0 -0
  86. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/report.py +0 -0
  87. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/review.py +0 -0
  88. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/scorecard.py +0 -0
  89. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/sessions.py +0 -0
  90. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/setup.py +0 -0
  91. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/status.py +0 -0
  92. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/terminal.py +0 -0
  93. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/test_gate.py +0 -0
  94. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/commands/tui.py +0 -0
  95. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/comments.py +0 -0
  96. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/config.py +0 -0
  97. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/config_reload.py +0 -0
  98. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/confirm_test.py +0 -0
  99. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/conflict_fix.py +0 -0
  100. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dao.py +0 -0
  101. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dashboard/__init__.py +0 -0
  102. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dashboard/fixture.py +0 -0
  103. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dashboard/index.html +0 -0
  104. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dashboard/server.py +0 -0
  105. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dashboard/terminal.py +0 -0
  106. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/db.py +0 -0
  107. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dead_end.py +0 -0
  108. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/decomposition_chat.py +0 -0
  109. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/README.md +0 -0
  110. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-agent.service +0 -0
  111. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-db-backup.service +0 -0
  112. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-db-backup.sh +0 -0
  113. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-db-backup.timer +0 -0
  114. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-drive-queue.service +0 -0
  115. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-drive-queue.timer +0 -0
  116. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-failure-notify.service +0 -0
  117. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-fleet-watchdog.service +0 -0
  118. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  119. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-notify.service +0 -0
  120. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-notify.timer +0 -0
  121. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-release-propagate.service +0 -0
  122. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-release-propagate.timer +0 -0
  123. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-release-window.service +0 -0
  124. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-release-window.timer +0 -0
  125. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-serve.service +0 -0
  126. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-web-dist-build.service +0 -0
  127. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-web-dist-build.timer +0 -0
  128. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy/coord-web.service +0 -0
  129. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy_manifest.py +0 -0
  130. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deploy_units.py +0 -0
  131. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/deps.py +0 -0
  132. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/diagnose.py +0 -0
  133. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dispatch.py +0 -0
  134. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/dist_name.py +0 -0
  135. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/drive_state.py +0 -0
  136. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/events.py +0 -0
  137. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/failure_class.py +0 -0
  138. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/filelock.py +0 -0
  139. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/fleet_config_health.py +0 -0
  140. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/forge_availability.py +0 -0
  141. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/freshness.py +0 -0
  142. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/gate_a.py +0 -0
  143. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/gate_b.py +0 -0
  144. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/gate_snapshot.py +0 -0
  145. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/gates.py +0 -0
  146. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/github_ops.py +0 -0
  147. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/github_throttle.py +0 -0
  148. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/goal.py +0 -0
  149. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/graph_health.py +0 -0
  150. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/__init__.py +0 -0
  151. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/aggregate.py +0 -0
  152. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/__init__.py +0 -0
  153. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/agent_install.py +0 -0
  154. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/cargo_targets.py +0 -0
  155. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/claude_binary.py +0 -0
  156. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/coord_web_ci_pin.py +0 -0
  157. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/deploy_lane_facts.py +0 -0
  158. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/disk.py +0 -0
  159. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/fleet_board.py +0 -0
  160. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  161. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/fleet_phantom.py +0 -0
  162. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/fleet_unit_drift.py +0 -0
  163. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/graph.py +0 -0
  164. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/graphify_cli.py +0 -0
  165. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/index_lock.py +0 -0
  166. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/plan_usage.py +0 -0
  167. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/release_cordon.py +0 -0
  168. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/repo_state.py +0 -0
  169. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/spawned_coord.py +0 -0
  170. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/stalled_pipeline.py +0 -0
  171. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/timer_active.py +0 -0
  172. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/toolchain.py +0 -0
  173. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/unit_drift.py +0 -0
  174. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/unit_enablement.py +0 -0
  175. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/checks/worktrees.py +0 -0
  176. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/cli.py +0 -0
  177. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/context.py +0 -0
  178. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/fleet_snapshot.py +0 -0
  179. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/models.py +0 -0
  180. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/pypi.py +0 -0
  181. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/registry.py +0 -0
  182. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/render.py +0 -0
  183. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/health/units.py +0 -0
  184. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/hooks.py +0 -0
  185. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/housekeeping.py +0 -0
  186. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/interactive.py +0 -0
  187. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/issue_store.py +0 -0
  188. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/liveness_auditor.py +0 -0
  189. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/machine_pause.py +0 -0
  190. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/merge_queue.py +0 -0
  191. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/milestone_chat.py +0 -0
  192. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/milestone_dispatch.py +0 -0
  193. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/milestone_gate.py +0 -0
  194. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/milestone_order.py +0 -0
  195. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/mock_author.py +0 -0
  196. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/network.py +0 -0
  197. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/new_issue_chat.py +0 -0
  198. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/__init__.py +0 -0
  199. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/baseline.py +0 -0
  200. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/cli.py +0 -0
  201. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/collect.py +0 -0
  202. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/digest.py +0 -0
  203. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/models.py +0 -0
  204. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/predicate.py +0 -0
  205. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/service.py +0 -0
  206. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/store.py +0 -0
  207. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notifier/transport.py +0 -0
  208. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/notify.py +0 -0
  209. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/openapi.py +0 -0
  210. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/overlap_fence.py +0 -0
  211. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/overlap_predict.py +0 -0
  212. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/parentage.py +0 -0
  213. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/parentage_github.py +0 -0
  214. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/pipeline.py +0 -0
  215. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/plan_parser.py +0 -0
  216. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/plans.py +0 -0
  217. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/platform_paths.py +0 -0
  218. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/portal_bridge.py +0 -0
  219. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/portal_store.py +0 -0
  220. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/portal_sync.py +0 -0
  221. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/pr_body_lint.py +0 -0
  222. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/prereqs.py +0 -0
  223. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/progress.py +0 -0
  224. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/providers/__init__.py +0 -0
  225. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/providers/base.py +0 -0
  226. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/providers/claude.py +0 -0
  227. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/providers/claude_pty.py +0 -0
  228. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/providers/opencode.py +0 -0
  229. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/queue_diagnose.py +0 -0
  230. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/reconcile.py +0 -0
  231. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/reconcile_tick.py +0 -0
  232. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/refine_chat.py +0 -0
  233. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/release_cordon.py +0 -0
  234. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/release_propagate.py +0 -0
  235. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/release_verify.py +0 -0
  236. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/release_window.py +0 -0
  237. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/repo_edit.py +0 -0
  238. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/repo_onboard.py +0 -0
  239. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/reports.py +0 -0
  240. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/revalidate.py +0 -0
  241. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/review.py +0 -0
  242. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/scorecard.py +0 -0
  243. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/self_health.py +0 -0
  244. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/serve_app.py +0 -0
  245. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  246. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  247. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  248. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  249. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  250. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/portal-followup/SKILL.md +0 -0
  251. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  252. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  253. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/skills/update-issue/SKILL.md +0 -0
  254. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/smoke.py +0 -0
  255. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/spend_ceiling.py +0 -0
  256. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/split_work.py +0 -0
  257. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/sql.py +0 -0
  258. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/stage_projection.py +0 -0
  259. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/state.py +0 -0
  260. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/test_author.py +0 -0
  261. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/test_chat.py +0 -0
  262. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/test_orchestrator.py +0 -0
  263. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/test_report.py +0 -0
  264. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/tui_release.py +0 -0
  265. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/usage.py +0 -0
  266. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/usage_limits.py +0 -0
  267. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/usage_rollup.py +0 -0
  268. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coord/worker_events.py +0 -0
  269. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/coordinator.example.yml +0 -0
  270. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-agent.service +0 -0
  271. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-db-backup.service +0 -0
  272. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-db-backup.sh +0 -0
  273. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-db-backup.timer +0 -0
  274. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-drive-queue.service +0 -0
  275. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-drive-queue.timer +0 -0
  276. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-failure-notify.service +0 -0
  277. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-failure-notify.sh +0 -0
  278. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-fleet-watchdog.service +0 -0
  279. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-fleet-watchdog.timer +0 -0
  280. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-notify.service +0 -0
  281. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-notify.timer +0 -0
  282. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-release-propagate.service +0 -0
  283. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-release-propagate.timer +0 -0
  284. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-release-window.service +0 -0
  285. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-release-window.timer +0 -0
  286. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-serve.service +0 -0
  287. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-web-dist-build.service +0 -0
  288. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-web-dist-build.sh +0 -0
  289. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-web-dist-build.timer +0 -0
  290. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-web-rollback.sh +0 -0
  291. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/coord-web.service +0 -0
  292. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/deploy/node-shim.sh +0 -0
  293. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  294. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ADR_COORD_WEB_CI.md +0 -0
  295. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ADR_COORD_WEB_DIST.md +0 -0
  296. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/AGENT_OPERATIONS.md +0 -0
  297. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ARCHITECTURE.md +0 -0
  298. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ARCH_SECURITY_GATES.md +0 -0
  299. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/COCKPIT.md +0 -0
  300. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/CONTROL_CENTER.md +0 -0
  301. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/COST_DISCIPLINE.md +0 -0
  302. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/CROSS_PLATFORM.md +0 -0
  303. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/CUSTOMER_FACING_APPS.md +0 -0
  304. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/CUSTOMER_PORTAL.md +0 -0
  305. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/DRIVE_QUEUE.md +0 -0
  306. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/EPHEMERAL_WORKERS.md +0 -0
  307. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/FORGE_MIGRATION.md +0 -0
  308. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/GRAPHIFY_SETUP.md +0 -0
  309. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ISSUE_GUIDANCE.md +0 -0
  310. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/MAC_MINI.md +0 -0
  311. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  312. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/NOTIFIER.md +0 -0
  313. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/OPENCODE_VERIFICATION.md +0 -0
  314. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/OPERATING_GOTCHAS.md +0 -0
  315. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/OPERATOR_GUIDES.md +0 -0
  316. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/ORACLE_LOOP.md +0 -0
  317. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/PHONE_WEBAPP.md +0 -0
  318. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/PIPELINE_V2.md +0 -0
  319. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/PLATFORM_EVOLUTION.md +0 -0
  320. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/SECOND_BACKEND.md +0 -0
  321. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/STORE_SERVICE.md +0 -0
  322. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  323. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/WEB_CONTROL_CENTER.md +0 -0
  324. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/WSL_WINDOWS_WORKER.md +0 -0
  325. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/mocks/web/README.md +0 -0
  326. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/mocks/web/_tokens.css +0 -0
  327. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/mocks/web/issue-detail.html +0 -0
  328. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/mocks/web/pipeline-narrow.html +0 -0
  329. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/docs/mocks/web/pipeline-wide.html +0 -0
  330. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/graphify-out/.gitignore +0 -0
  331. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/install-agent.sh +0 -0
  332. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/pyproject.toml +0 -0
  333. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/audit_review_verdict_overrides.py +0 -0
  334. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  335. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/build-worker-image.sh +0 -0
  336. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/coordinator-machine.py +0 -0
  337. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/epic-down.sh +0 -0
  338. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/epic-up.sh +0 -0
  339. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/preflight.sh +0 -0
  340. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/provision-worker.sh +0 -0
  341. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  342. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  343. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/azure-workers/verify-github-token.sh +0 -0
  344. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/check_gh_argv_containment.py +0 -0
  345. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/codegen.py +0 -0
  346. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/coord-test-runner.sh +0 -0
  347. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/coord-venv-rollback.sh +0 -0
  348. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/drive-batch.sh +0 -0
  349. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/fleet_watchdog.py +0 -0
  350. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/gen_board_fixture.py +0 -0
  351. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/gen_mock_index.py +0 -0
  352. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/next_release_tag.py +0 -0
  353. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/run_tests_in_populated_home.sh +0 -0
  354. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/run_tests_without_gh.sh +0 -0
  355. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/smoke_437_interactive.py +0 -0
  356. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/verify_878_review_capture.py +0 -0
  357. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/verify_release_published.py +0 -0
  358. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/scripts/verify_release_wheel.py +0 -0
  359. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/setup.cfg +0 -0
  360. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/SMOKE_SET.md +0 -0
  361. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/__init__.py +0 -0
  362. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/audit_1039.rs +0 -0
  363. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/contract.md +0 -0
  364. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/manifest.yml +0 -0
  365. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
  366. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
  367. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
  368. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
  369. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-37/conftest.py +0 -0
  370. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-37/contract.md +0 -0
  371. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-37/manifest.yml +0 -0
  372. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  373. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  374. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/contract.md +0 -0
  375. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/manifest.yml +0 -0
  376. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
  377. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
  378. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
  379. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
  380. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
  381. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
  382. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
  383. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
  384. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
  385. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
  386. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-51/contract.md +0 -0
  387. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  388. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  389. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-51/manifest.yml +0 -0
  390. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  391. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-51/tsconfig.json +0 -0
  392. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/board_split_2288.rs +0 -0
  393. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
  394. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
  395. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/contract.md +0 -0
  396. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
  397. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/manifest.yml +0 -0
  398. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
  399. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
  400. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
  401. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
  402. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
  403. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
  404. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
  405. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
  406. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
  407. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
  408. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-65/tabs_persistence_2286.rs +0 -0
  409. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/approved_items_2532.rs +0 -0
  410. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/contract.md +0 -0
  411. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/manifest.d/2533.yml +0 -0
  412. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/manifest.yml +0 -0
  413. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/mocks/approved-items-chat-opened.screen +0 -0
  414. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/mocks/approved-items-context-menu.screen +0 -0
  415. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/mocks/approved-items-detail.screen +0 -0
  416. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/mocks/approved-items-empty.screen +0 -0
  417. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/mocks/approved-items-populated.screen +0 -0
  418. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-67/pull_decomposition_2533.rs +0 -0
  419. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  420. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/conftest.py +0 -0
  421. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/board-pipeline-basic.json +0 -0
  422. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  423. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  424. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  425. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  426. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/all_pass.json +0 -0
  427. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  428. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/mixed_fail.json +0 -0
  429. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  430. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  431. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/skip.json +0 -0
  432. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/playwright/truncated.json +0 -0
  433. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  434. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  435. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  436. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  437. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  438. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  439. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  440. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  441. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_acceptance.py +0 -0
  442. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_acceptance_drivers.py +0 -0
  443. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent.py +0 -0
  444. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_api_error.py +0 -0
  445. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_app.py +0 -0
  446. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_branch_base.py +0 -0
  447. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_branch_capture.py +0 -0
  448. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_config_free_1712.py +0 -0
  449. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_deploy_units_endpoint.py +0 -0
  450. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_dirty_worktree.py +0 -0
  451. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  452. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_graph_self_heal.py +0 -0
  453. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_health_h3.py +0 -0
  454. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_idle_restart.py +0 -0
  455. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_push_failure.py +0 -0
  456. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_reap.py +0 -0
  457. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_repos_and_pull.py +0 -0
  458. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_restart_services_endpoint.py +0 -0
  459. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_skills_self_heal.py +0 -0
  460. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_startup_diagnostics.py +0 -0
  461. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_update.py +0 -0
  462. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_update_bluegreen.py +0 -0
  463. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_usage_limit.py +0 -0
  464. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_agent_zero_commit.py +0 -0
  465. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_ambient_home_isolation.py +0 -0
  466. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_approve_dependency_busy_2804.py +0 -0
  467. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_approve_reject_plan.py +0 -0
  468. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_approve_usage_gate.py +0 -0
  469. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_approved_work_2532.py +0 -0
  470. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_assignment_already_recorded_daemon.py +0 -0
  471. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_audit_log.py +0 -0
  472. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_audit_outcome.py +0 -0
  473. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_audit_query.py +0 -0
  474. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_auto_loop.py +0 -0
  475. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_auto_release_publish_2035.py +0 -0
  476. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_base_checkout_restore.py +0 -0
  477. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_block_log.py +0 -0
  478. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_cap_762.py +0 -0
  479. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_fixture.py +0 -0
  480. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_read_path.py +0 -0
  481. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_schema.py +0 -0
  482. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_service.py +0 -0
  483. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_state.py +0 -0
  484. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_board_wire.py +0 -0
  485. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_brain.py +0 -0
  486. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_branch_model.py +0 -0
  487. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_bug_intake.py +0 -0
  488. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_build_worker_image_env_update.py +0 -0
  489. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cargo_cache.py +0 -0
  490. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_check_gh_argv_containment.py +0 -0
  491. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_ci_acceptance_gate_1950.py +0 -0
  492. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_ci_fix.py +0 -0
  493. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_ci_gitlab.py +0 -0
  494. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_ci_parity_2091.py +0 -0
  495. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_ci_store.py +0 -0
  496. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_claim.py +0 -0
  497. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_claude_md_budget.py +0 -0
  498. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_acceptance.py +0 -0
  499. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_assign.py +0 -0
  500. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  501. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_assign_interactive_remote.py +0 -0
  502. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_assign_provider.py +0 -0
  503. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  504. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_audit.py +0 -0
  505. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_chat_continue.py +0 -0
  506. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_decide.py +0 -0
  507. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_diagnose_config_provenance.py +0 -0
  508. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_diagnose_forge_availability.py +0 -0
  509. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_diagnose_graph.py +0 -0
  510. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_diagnose_self.py +0 -0
  511. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_doctor.py +0 -0
  512. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_doctor_config_free_1801.py +0 -0
  513. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  514. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_drive.py +0 -0
  515. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_escalate.py +0 -0
  516. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_fix_headless_review.py +0 -0
  517. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_gate_a.py +0 -0
  518. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_install_drift.py +0 -0
  519. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_install_skills.py +0 -0
  520. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_issue_comment.py +0 -0
  521. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_issue_create_label.py +0 -0
  522. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_issue_reopen.py +0 -0
  523. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_issue_view_list.py +0 -0
  524. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_merge.py +0 -0
  525. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_assign.py +0 -0
  526. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_capture.py +0 -0
  527. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_chat_add_child.py +0 -0
  528. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_dispatch.py +0 -0
  529. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_gate_b.py +0 -0
  530. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_gate_c.py +0 -0
  531. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_order.py +0 -0
  532. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  533. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_milestone_ship.py +0 -0
  534. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_network.py +0 -0
  535. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_new_issue_chat.py +0 -0
  536. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_plans.py +0 -0
  537. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_portal.py +0 -0
  538. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_pr.py +0 -0
  539. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_pull_artifact.py +0 -0
  540. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_queue.py +0 -0
  541. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_reattach_sessions.py +0 -0
  542. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_refine_board.py +0 -0
  543. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_release_preflight.py +0 -0
  544. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_release_propagate.py +0 -0
  545. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_release_window.py +0 -0
  546. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_repo_2220.py +0 -0
  547. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  548. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_scorecard.py +0 -0
  549. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_set_review_findings.py +0 -0
  550. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_advisory_terminal.py +0 -0
  551. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_contested_tag.py +0 -0
  552. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_merge_queue.py +0 -0
  553. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_provider.py +0 -0
  554. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_review_finalizing.py +0 -0
  555. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_test_failed_tag.py +0 -0
  556. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_status_usage_limit.py +0 -0
  557. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_sync_comments_873.py +0 -0
  558. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_test_plan.py +0 -0
  559. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_track.py +0 -0
  560. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_tui_update.py +0 -0
  561. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cli_wait.py +0 -0
  562. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_client_base_install.py +0 -0
  563. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_commands_common.py +0 -0
  564. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_comments.py +0 -0
  565. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_completion_summary.py +0 -0
  566. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_config.py +0 -0
  567. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_config_acceptance.py +0 -0
  568. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_config_audit.py +0 -0
  569. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_config_pricing.py +0 -0
  570. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  571. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_config_usage_gate.py +0 -0
  572. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_confirm_test.py +0 -0
  573. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_conflict_fix.py +0 -0
  574. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_conflict_fix_semantic.py +0 -0
  575. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  576. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_test.py +0 -0
  577. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_test_runner_baseline.py +0 -0
  578. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_test_runner_populated_home.py +0 -0
  579. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_test_runner_routing.py +0 -0
  580. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_test_runner_toolchain.py +0 -0
  581. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_uat.py +0 -0
  582. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coord_web_sse_restart_live.py +0 -0
  583. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_coordinator_machine.py +0 -0
  584. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_cross_platform_imports.py +0 -0
  585. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dao.py +0 -0
  586. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dashboard.py +0 -0
  587. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dashboard_fixture.py +0 -0
  588. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dashboard_terminal.py +0 -0
  589. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dashboard_terminal_live.py +0 -0
  590. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_db.py +0 -0
  591. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dead_end.py +0 -0
  592. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_decomposition_chat.py +0 -0
  593. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_coord_db_backup.py +0 -0
  594. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_coord_web_dist.py +0 -0
  595. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_coord_web_rollback.py +0 -0
  596. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_drive_queue_unit.py +0 -0
  597. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_failure_notify_unit.py +0 -0
  598. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_manifest.py +0 -0
  599. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_notify_unit.py +0 -0
  600. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_units_lane.py +0 -0
  601. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deploy_web_unit.py +0 -0
  602. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_deps.py +0 -0
  603. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_diagnose.py +0 -0
  604. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dispatch.py +0 -0
  605. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dispatch_target_validation.py +0 -0
  606. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_dist_name.py +0 -0
  607. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_done_housekeeping.py +0 -0
  608. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive.py +0 -0
  609. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_queue_blocked_rendering.py +0 -0
  610. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_queue_launch_argv.py +0 -0
  611. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  612. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_queue_roll_pending.py +0 -0
  613. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  614. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_state.py +0 -0
  615. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_drive_tmux.py +0 -0
  616. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_epic_up_capability_detection.py +0 -0
  617. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  618. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_epic_up_image_provenance.py +0 -0
  619. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_errors.py +0 -0
  620. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_events.py +0 -0
  621. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_failure_class.py +0 -0
  622. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_filelock.py +0 -0
  623. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  624. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_fix_of_force_override.py +0 -0
  625. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_fleet_config_health.py +0 -0
  626. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_fleet_health_probes.py +0 -0
  627. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_fleet_health_snapshot.py +0 -0
  628. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_fleet_watchdog.py +0 -0
  629. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_forge_availability.py +0 -0
  630. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_freshness.py +0 -0
  631. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_gate_a.py +0 -0
  632. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_gate_b.py +0 -0
  633. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_gate_snapshot_staleness.py +0 -0
  634. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_gates.py +0 -0
  635. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  636. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_gen_mock_index.py +0 -0
  637. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_generated_rust_fixture.py +0 -0
  638. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_generated_types_fixture.py +0 -0
  639. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_github_ops.py +0 -0
  640. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_github_throttle.py +0 -0
  641. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_goal.py +0 -0
  642. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_graph_health.py +0 -0
  643. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_graph_selfheal_absent_2237.py +0 -0
  644. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_handoff.py +0 -0
  645. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_checks.py +0 -0
  646. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_cli.py +0 -0
  647. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_cli_graph.py +0 -0
  648. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_config.py +0 -0
  649. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_context.py +0 -0
  650. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_coord_web_ci_pin.py +0 -0
  651. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_deploy_lane_facts.py +0 -0
  652. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_fix.py +0 -0
  653. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_incident_regression.py +0 -0
  654. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_pypi.py +0 -0
  655. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_registry.py +0 -0
  656. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_release_cordon_probe.py +0 -0
  657. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_timer_active.py +0 -0
  658. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_toolchain.py +0 -0
  659. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_unit_drift.py +0 -0
  660. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_health_unit_enablement.py +0 -0
  661. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_hooks.py +0 -0
  662. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_human_attended_437.py +0 -0
  663. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_init.py +0 -0
  664. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_integration.py +0 -0
  665. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_briefing_echo.py +0 -0
  666. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_pane_log_2541.py +0 -0
  667. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_prefill_state.py +0 -0
  668. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_session_relaunch.py +0 -0
  669. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_test_verdict_backstop.py +0 -0
  670. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_token_attribution.py +0 -0
  671. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_interactive_worktree.py +0 -0
  672. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_issue_store_seam.py +0 -0
  673. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_liveness_auditor.py +0 -0
  674. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_liveness_notify.py +0 -0
  675. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_lock_contention_ratchet.py +0 -0
  676. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_machine_pause.py +0 -0
  677. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_merge_queue.py +0 -0
  678. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_merge_verify.py +0 -0
  679. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_milestone_chat.py +0 -0
  680. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_milestone_dispatch.py +0 -0
  681. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_milestone_gate.py +0 -0
  682. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_milestone_order.py +0 -0
  683. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_milestone_seam.py +0 -0
  684. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_mock_author.py +0 -0
  685. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_model_tiering.py +0 -0
  686. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_models.py +0 -0
  687. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_models_config_labels.py +0 -0
  688. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_needs_attention.py +0 -0
  689. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_network.py +0 -0
  690. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_new_issue_chat.py +0 -0
  691. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_next_release_tag.py +0 -0
  692. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_node_shim.py +0 -0
  693. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_baseline.py +0 -0
  694. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_cli.py +0 -0
  695. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_collect.py +0 -0
  696. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_config.py +0 -0
  697. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_drive_seam.py +0 -0
  698. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_isolation.py +0 -0
  699. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_predicate.py +0 -0
  700. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_quiet_hours.py +0 -0
  701. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notifier_service.py +0 -0
  702. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notify.py +0 -0
  703. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_notify_drain.py +0 -0
  704. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_openapi.py +0 -0
  705. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_operational_defaults.py +0 -0
  706. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_overlap_fence.py +0 -0
  707. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_overlap_predict.py +0 -0
  708. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_packaged_deploy_units.py +0 -0
  709. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_parentage.py +0 -0
  710. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_paste_landed.py +0 -0
  711. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  712. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_pipeline.py +0 -0
  713. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_plan_followup_approve_plan_command.py +0 -0
  714. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_plan_followup_pr_command.py +0 -0
  715. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_plan_followup_review_command.py +0 -0
  716. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_plan_only.py +0 -0
  717. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_plan_parser.py +0 -0
  718. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_platform_paths.py +0 -0
  719. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_portal_bridge.py +0 -0
  720. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_portal_config.py +0 -0
  721. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_portal_store.py +0 -0
  722. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_portal_sync.py +0 -0
  723. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_pr_body_lint.py +0 -0
  724. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_prereqs.py +0 -0
  725. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_production_db_guard.py +0 -0
  726. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_progress.py +0 -0
  727. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_provider_seam.py +0 -0
  728. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_providers.py +0 -0
  729. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_providers_config_labels.py +0 -0
  730. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_providers_pty.py +0 -0
  731. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_quiet_hours.py +0 -0
  732. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_quiet_hours_store_2146.py +0 -0
  733. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reap_merged_sessions.py +0 -0
  734. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reap_stale_interactive_tick.py +0 -0
  735. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile.py +0 -0
  736. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_branch.py +0 -0
  737. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_completions.py +0 -0
  738. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  739. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_merges.py +0 -0
  740. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_no_agent_record.py +0 -0
  741. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_tick.py +0 -0
  742. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reconcile_usage_limit_done.py +0 -0
  743. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_refine_chat.py +0 -0
  744. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_cordon_2101.py +0 -0
  745. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  746. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_cordon_deadlock_2240.py +0 -0
  747. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_cordon_stuck_2490.py +0 -0
  748. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_propagate.py +0 -0
  749. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_propagate_threshold.py +0 -0
  750. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_roll_window_handoff.py +0 -0
  751. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_unified_1242.py +0 -0
  752. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_verify.py +0 -0
  753. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_release_window.py +0 -0
  754. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_remote_auto_prune.py +0 -0
  755. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_remote_interactive_reaper.py +0 -0
  756. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_repo_add.py +0 -0
  757. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_repo_edit_2220.py +0 -0
  758. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_repo_graph_fleet_2237.py +0 -0
  759. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_repo_onboard_2220.py +0 -0
  760. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_report_result_push.py +0 -0
  761. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_reports.py +0 -0
  762. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_retry.py +0 -0
  763. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_retry_advisory_1606.py +0 -0
  764. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_retry_type_1636.py +0 -0
  765. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_revalidate.py +0 -0
  766. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review.py +0 -0
  767. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_end_review_without_verdict.py +0 -0
  768. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_parse_failure_diagnostic.py +0 -0
  769. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_reaffirm.py +0 -0
  770. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_state.py +0 -0
  771. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_verdict_backstop.py +0 -0
  772. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_verdict_override_audit.py +0 -0
  773. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_verdict_relay.py +0 -0
  774. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_review_zero_commits.py +0 -0
  775. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_scoped_review_wiring.py +0 -0
  776. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_scorecard.py +0 -0
  777. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_self_health.py +0 -0
  778. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_serve.py +0 -0
  779. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_serve_app_board_trim.py +0 -0
  780. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_session.py +0 -0
  781. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_slice_issue_attribution.py +0 -0
  782. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_smoke.py +0 -0
  783. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_smoke_live_checkout_restore.py +0 -0
  784. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_smoke_workflow.py +0 -0
  785. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_spend_ceiling.py +0 -0
  786. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_spend_ceiling_coordinator.py +0 -0
  787. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_split.py +0 -0
  788. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_split_work.py +0 -0
  789. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_sql_dialect.py +0 -0
  790. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_stage_projection.py +0 -0
  791. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_stalled_pipeline.py +0 -0
  792. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_state.py +0 -0
  793. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_state_review_findings_daemon.py +0 -0
  794. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_status_fleet_footer.py +0 -0
  795. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_stop_1567.py +0 -0
  796. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_store_contract.py +0 -0
  797. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_stuck.py +0 -0
  798. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  799. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_terminal_command.py +0 -0
  800. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_test_author.py +0 -0
  801. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_test_chat.py +0 -0
  802. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_test_orchestrator.py +0 -0
  803. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_test_report.py +0 -0
  804. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_test_verdict_parsing.py +0 -0
  805. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_test_verdict_transcript_floor.py +0 -0
  806. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_text_io_encoding_audit.py +0 -0
  807. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_thin_client_board_audit.py +0 -0
  808. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_thin_client_config_load_1080.py +0 -0
  809. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_thin_client_daemon_routing_906.py +0 -0
  810. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_tmux_host.py +0 -0
  811. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_tmux_session.py +0 -0
  812. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_transcript_floor.py +0 -0
  813. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_usage.py +0 -0
  814. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_usage_limits.py +0 -0
  815. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_usage_rollup.py +0 -0
  816. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_venv_live_install_2121.py +0 -0
  817. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_version_single_source.py +0 -0
  818. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_watch.py +0 -0
  819. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  820. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worker_env_venv_isolation.py +0 -0
  821. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worker_events.py +0 -0
  822. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worker_image_pin_sync.py +0 -0
  823. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worker_safety.py +0 -0
  824. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worker_test_scoping.py +0 -0
  825. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worktree.py +0 -0
  826. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  827. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/Cargo.lock +0 -0
  828. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/Cargo.toml +0 -0
  829. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/cargo-config-local-quadraui.toml.example +0 -0
  830. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/approved.rs +0 -0
  831. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/audit.rs +0 -0
  832. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/chat.rs +0 -0
  833. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/data.rs +0 -0
  834. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/dialogs.rs +0 -0
  835. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/doc_tabs.rs +0 -0
  836. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/drive.rs +0 -0
  837. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/drive_queue.rs +0 -0
  838. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/escalation.rs +0 -0
  839. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/events.rs +0 -0
  840. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/fixtures.rs +0 -0
  841. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/fleet_health.rs +0 -0
  842. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/fleet_sessions.rs +0 -0
  843. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/fleet_terminals.rs +0 -0
  844. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/format.rs +0 -0
  845. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/milestone_dag.rs +0 -0
  846. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/mod.rs +0 -0
  847. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/msv.rs +0 -0
  848. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/pipeline.rs +0 -0
  849. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/plans.rs +0 -0
  850. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/render.rs +0 -0
  851. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/reports.rs +0 -0
  852. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/sessions.rs +0 -0
  853. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/settings_ui.rs +0 -0
  854. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/sidebar.rs +0 -0
  855. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/terminal.rs +0 -0
  856. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/tests.rs +0 -0
  857. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/types/generated.rs +0 -0
  858. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/types.rs +0 -0
  859. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/app/workspace.rs +0 -0
  860. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/bin/gtk.rs +0 -0
  861. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/commands.rs +0 -0
  862. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/lib.rs +0 -0
  863. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/main.rs +0 -0
  864. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/src/settings.rs +0 -0
  865. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/tests/acceptance.rs +0 -0
  866. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/tests/cli.rs +0 -0
  867. {code_coordinator-0.5.256 → code_coordinator-0.5.257}/tui/tests/fixtures/board_sample.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.256
3
+ Version: 0.5.257
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.256
3
+ Version: 0.5.257
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.256",
2
+ "tag": "0.5.257",
3
3
  "distance": 0,
4
- "node": "g1d53f40b4c8b97ed2f04d59ad1fad5e0d631d098",
4
+ "node": "g0f6b2aa2009290d8d6e254f4de39fff2490b3253",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-27"
@@ -3450,21 +3450,45 @@ def _fetch_live_prereq_terminal(
3450
3450
  BOUNDED THE SAME WAY ITS SIBLINGS ARE. Only deps named by an entry
3451
3451
  currently ``waiting`` or ``blocked`` with a non-empty ``after=``, and
3452
3452
  only those the board does NOT already resolve on its own
3453
- (``facts.landed``, ``facts.open``, ``facts.active_work``, or a hit in
3454
- this tick's own pre-reconcile ``states`` — i.e. genuinely still queued)
3455
- make it into a live call. A queue with no unresolved ``after=`` edge
3456
- costs nothing here, same as ``_fetch_live_blocked_gate`` costs nothing
3457
- with no ``blocked`` rows. ``states`` is approximated from *entries*'
3458
- pre-tick ``state`` field (cheap, no I/O) rather than threaded from
3459
- ``plan_tick``'s own in-progress reconcile — a false negative here (a dep
3460
- this approximation still calls a live-check target, when the tick's own
3461
- authoritative ``states`` would already have resolved it another way)
3462
- costs one harmless extra ``gh`` read, never a wrong verdict:
3463
- ``_resolve_prereqs`` only ever consults this mapping in its OWN final
3464
- branch, after its own ``states``/``facts`` checks have already returned.
3465
- A false positive (a dep this skips that the tick's real walk would have
3466
- reached the final branch for) simply leaves that one dep to the
3467
- pre-#2602 fallback for this tick — caught on the next one.
3453
+ (``facts.landed``, ``facts.open``, ``facts.active_work``, or a
3454
+ ``STATE_DONE`` hit in this tick's own pre-reconcile ``states`` — i.e.
3455
+ already known landed) make it into a live call. A queue with no
3456
+ unresolved ``after=`` edge costs nothing here, same as
3457
+ ``_fetch_live_blocked_gate`` costs nothing with no ``blocked`` rows.
3458
+ ``states`` is approximated from *entries*' pre-tick ``state`` field
3459
+ (cheap, no I/O) rather than threaded from ``plan_tick``'s own
3460
+ in-progress reconcile — a false negative here (a dep this approximation
3461
+ still calls a live-check target, when the tick's own authoritative
3462
+ ``states`` would already have resolved it another way) costs one
3463
+ harmless extra ``gh`` read, never a wrong verdict: ``_resolve_prereqs``
3464
+ only ever consults this mapping in its OWN final branch, after its own
3465
+ ``states``/``facts`` checks have already returned. A false positive (a
3466
+ dep this skips that the tick's real walk would have reached the final
3467
+ branch for) simply leaves that one dep to the pre-#2602 fallback for
3468
+ this tick — caught on the next one.
3469
+
3470
+ #2850 WIDENS THE BOUND, in two ways, both closing the same class of gap
3471
+ the incident exposed (a pre-req stuck under a stale/bogus queue row, not
3472
+ merely absent from the queue):
3473
+
3474
+ * a dep whose queue row IS present now still gets a live call as long as
3475
+ that row isn't already ``STATE_DONE`` — before #2850 any dep present
3476
+ in ``states`` at all (``running``, ``waiting``, ``blocked``, ...) was
3477
+ excluded outright, on the (pre-#2850) assumption that "still queued"
3478
+ meant the local row was trustworthy. A `running` row that outlived the
3479
+ drive it named (the #2850 incident: a drive that exited 0 having
3480
+ merged, requeued into a `running` row nothing else re-checks) broke
3481
+ that assumption; ``coord.drive_queue._resolve_prereqs``'s matching
3482
+ #2850 change is what actually consults this for those deps.
3483
+ * every ``running`` entry's OWN key is also added as a target when it
3484
+ has no live tmux session (``board.live_sessions``) and the board does
3485
+ not yet show it landed — i.e. exactly the entries
3486
+ ``coord.drive_queue._reconcile_running`` is about to run its
3487
+ death/retry diagnosis on THIS tick. That function consults this same
3488
+ mapping, keyed by its OWN ``entry.key``, right before it would
3489
+ otherwise spend a requeue attempt — the "re-check before requeuing
3490
+ anything" half of #2850, independent of whatever (if anything) the
3491
+ drive's own exit reason said.
3468
3492
  """
3469
3493
  states = {e.key: e.state for e in entries}
3470
3494
  targets: set[str] = set()
@@ -3472,12 +3496,24 @@ def _fetch_live_prereq_terminal(
3472
3496
  if e.state not in (STATE_WAITING, STATE_BLOCKED) or not e.after:
3473
3497
  continue
3474
3498
  for dep in e.after:
3475
- if dep in targets or states.get(dep) is not None:
3499
+ if dep in targets or states.get(dep) == STATE_DONE:
3476
3500
  continue
3477
3501
  facts = board.facts(dep)
3478
3502
  if facts.landed or facts.open or facts.active_work:
3479
3503
  continue
3480
3504
  targets.add(dep)
3505
+ # #2850: a RUNNING entry about to be reconciled by `_reconcile_running`'s
3506
+ # death/retry logic THIS tick (no live session, and the board's own
3507
+ # cached facts don't show it landed) gets the identical live re-check —
3508
+ # bounded to exactly the entries that would otherwise risk a requeue.
3509
+ for e in entries:
3510
+ if e.state != STATE_RUNNING or e.key in targets:
3511
+ continue
3512
+ if e.key in board.live_sessions:
3513
+ continue
3514
+ if board.facts(e.key).landed:
3515
+ continue
3516
+ targets.add(e.key)
3481
3517
  if not targets:
3482
3518
  return {}
3483
3519
 
@@ -116,7 +116,11 @@ from coord.failure_class import (
116
116
  environmental_backoff_secs,
117
117
  plan_usage_limit_resume,
118
118
  )
119
- from coord.models import DELIVERABLE_ANALYSIS_LABEL, POLICY_REFUSAL_MARKER
119
+ from coord.models import (
120
+ DELIVERABLE_ANALYSIS_LABEL,
121
+ MERGE_LANDED_MARKER,
122
+ POLICY_REFUSAL_MARKER,
123
+ )
120
124
  from coord.self_health import self_freshness
121
125
  from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
122
126
  # Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
@@ -1869,7 +1873,10 @@ def decide(
1869
1873
  if state.work_status == "merged" or state.merge_status == "MERGED":
1870
1874
  target = state.repo_default_branch or "main"
1871
1875
  if state.work_branch and verifier.verify_merged(state):
1872
- return _succeed(f"✓ MERGED — {state.work_branch} has landed on {target}")
1876
+ return _succeed(
1877
+ f"✓ MERGED — {state.work_branch} has landed on {target}\n"
1878
+ f" {MERGE_LANDED_MARKER}"
1879
+ )
1873
1880
  base = opts.repo_path or f"~/src/{state.repo}"
1874
1881
  return _die(
1875
1882
  f"board says merged but {state.work_branch} has NOT landed on {target}\n"
@@ -100,7 +100,7 @@ from coord.merge_queue import (
100
100
  is_ci_unreadable_reason,
101
101
  is_stale_smoke_reason,
102
102
  )
103
- from coord.models import is_policy_refusal_reason
103
+ from coord.models import is_merge_landed_reason, is_policy_refusal_reason
104
104
 
105
105
  # ── queue states ─────────────────────────────────────────────────────────────
106
106
  #
@@ -1818,17 +1818,26 @@ def _resolve_prereqs(
1818
1818
  _fetch_live_prereq_terminal``, the same positive-liveness test
1819
1819
  ``coord.overlap_predict``'s ``terminal_checker`` uses for the sibling
1820
1820
  ``[branch]`` half of #2602) confirms the issue is closed or its PR
1821
- merged — consulted ONLY in the final branch below, right before it would
1822
- otherwise declare *dep* unsatisfiable. This is the recovery half: the
1823
- cached ``board.facts(dep)`` this function checks first is a periodic
1824
- ``/board`` build, not a live read, and a pre-req that has JUST left the
1825
- queue (merged, issue closed) can outrun that cache — reading as "not
1826
- queued, not merged, not open" (:data:`_UNKNOWN_PREREQ_MARKER`) even
1821
+ merged. This is the recovery half: the cached ``board.facts(dep)`` this
1822
+ function checks first is a periodic ``/board`` build, not a live read,
1823
+ and a pre-req that has JUST left the queue (merged, issue closed) can
1824
+ outrun that cache — reading as "not queued, not merged, not open" even
1827
1825
  though the dep is, in fact, already done. Before this existed that
1828
1826
  verdict was unconditionally unsatisfiable and permanent
1829
1827
  (coord-portal#145/#149/#150, 2026-08-22): a dep absent here (no live
1830
1828
  check ran, or it ran and came back inconclusive) falls through to
1831
1829
  exactly that pre-#2602 behaviour — never a false "satisfied".
1830
+
1831
+ #2850 widens WHERE this is consulted: originally only the final branch
1832
+ below (*dep* absent from the queue entirely) checked it. But a dep can
1833
+ just as easily be PRESENT in the queue under a stale or outright bogus
1834
+ row — the #2850 incident: a drive that exited 0 having merged got
1835
+ requeued into a `running` row that never dies again on its own — and
1836
+ that shape used to return "waiting"/"will never satisfy" straight out
1837
+ of the ``dep_state is not None`` branch, never reaching this check at
1838
+ all. So it is now ALSO consulted there, for every ``dep_state`` other
1839
+ than ``STATE_DONE``: a pre-req that demonstrably landed must satisfy
1840
+ the dependent whatever its own queue row happens to claim.
1832
1841
  """
1833
1842
  if entry.key in cycle_keys:
1834
1843
  return _Verdict(False, True, cycle_keys[entry.key])
@@ -1863,6 +1872,20 @@ def _resolve_prereqs(
1863
1872
  # flips to `done`, instead of the tick after the cache
1864
1873
  # independently rediscovers the same fact.
1865
1874
  continue
1875
+ if (live_prereq_terminal or {}).get(dep):
1876
+ # #2850: *dep*'s OWN queue row says it is still in play
1877
+ # (``running``, ``waiting``, ``blocked``, ...) — but a live
1878
+ # re-check taken THIS tick confirms it is, in fact, already
1879
+ # closed or merged. Before this, only a dep ABSENT from the
1880
+ # queue entirely ever reached the #2602 recovery check below;
1881
+ # a dep still SITTING in the queue under a stale/bogus row
1882
+ # (the #2850 incident: a drive that exited 0 having merged,
1883
+ # requeued into a bogus `running` row) short-circuited to
1884
+ # "waiting"/"will never satisfy" here and shadowed the very
1885
+ # recovery check meant to catch exactly this. A dependent
1886
+ # must never be blocked by a pre-req that demonstrably
1887
+ # landed, whatever its queue row claims.
1888
+ continue
1866
1889
  if dep_state in (STATE_BLOCKED, STATE_FAILED):
1867
1890
  return _Verdict(
1868
1891
  False,
@@ -2757,6 +2780,7 @@ def _reconcile_running(
2757
2780
  exit_reasons: Mapping[str, str] | None = None,
2758
2781
  exit_refused: Mapping[str, bool] | None = None,
2759
2782
  exit_dead_end: Mapping[str, bool] | None = None,
2783
+ live_prereq_terminal: Mapping[str, bool] | None = None,
2760
2784
  ) -> tuple[Reconcile, Blocked | None]:
2761
2785
  """Resolve one ``running`` entry against the board.
2762
2786
 
@@ -2848,6 +2872,35 @@ def _reconcile_running(
2848
2872
  the default budget. Still finite, still ``exhausted`` → ``blocked`` with
2849
2873
  the same diagnosis-and-recovery instructions once ITS wider ceiling is
2850
2874
  also hit.
2875
+
2876
+ #2850 adds TWO more "already landed" signals, both checked with the SAME
2877
+ priority as ``facts.landed`` above — right after it, before
2878
+ ``facts.active_work`` — because both are confirmations of terminal
2879
+ completion at least as strong as a cached board read, and a drive that
2880
+ has genuinely landed must never be requeued regardless of what
2881
+ ``active_work``/cross-host/grace-window evidence says next:
2882
+
2883
+ * ``own_reason`` matching :func:`coord.models.is_merge_landed_reason` —
2884
+ the drive's OWN exit narrated a confirmed merge (``coord.drive.
2885
+ decide``'s "terminal: merged" branch, gated on a LIVE
2886
+ ``verifier.verify_merged`` call, not merely the board's cached
2887
+ ``merge_status``). Before this, ``exit_code=0`` plus a "✓ MERGED —
2888
+ … has landed" summary still fell all the way through to the generic
2889
+ "no session, no active work, nothing landed" retry logic below — the
2890
+ drive's own strongest evidence, sitting unread in ``own_reason``,
2891
+ never consulted — and got requeued and relaunched into dead air.
2892
+ * *live_prereq_terminal* (#2602's mechanism, reused): when the shell's
2893
+ bounded live re-check (:func:`coord.commands.drive_queue.
2894
+ _fetch_live_prereq_terminal`, widened by #2850 to also probe a
2895
+ ``running`` entry's OWN key, not just other entries' ``after=``
2896
+ pre-reqs) confirms THIS key is closed or merged, that outranks
2897
+ ``own_reason`` even existing — it catches every OTHER shape of "this
2898
+ entry's issue is actually done, but this run's own exit reason
2899
+ either says nothing about it or predates it" (a crash, a reap, a
2900
+ dead-end exit for an issue that merged out of band between the crash
2901
+ and this tick). Re-checking before ANY requeue — not only the
2902
+ literal MERGED-exit-text case — is what makes the class safe rather
2903
+ than patching just the one reported instance.
2851
2904
  """
2852
2905
  facts = board.facts(entry.key)
2853
2906
 
@@ -2874,6 +2927,62 @@ def _reconcile_running(
2874
2927
  None,
2875
2928
  )
2876
2929
 
2930
+ # Resolved here — before `facts.active_work` and everything after it —
2931
+ # so the #2850 merged-exit check just below can use it; every later
2932
+ # branch that reads `own_reason` (gate_a/policy park, refused/dead_end,
2933
+ # the retry/exhausted wording) is unaffected by hoisting this, since
2934
+ # none of them run before this point.
2935
+ own_reason = (exit_reasons or {}).get(entry.key)
2936
+ if own_reason and is_merge_landed_reason(own_reason):
2937
+ # #2850: the drive's own exit already confirmed — via a LIVE
2938
+ # `verify_merged` check, not the board's cached `merge_status` —
2939
+ # that this landed. Mark it done here, before anything below gets a
2940
+ # chance to read the absent session / absent active-work as a death
2941
+ # and requeue a launch that has nothing left to do.
2942
+ reason = f"{own_reason} — confirmed merged (#2850), not a death"
2943
+ return (
2944
+ Reconcile(
2945
+ entry.key,
2946
+ "done",
2947
+ reason,
2948
+ occupies=False,
2949
+ updates={
2950
+ "state": STATE_DONE,
2951
+ "last_reason": reason,
2952
+ "session_name": None,
2953
+ },
2954
+ ),
2955
+ None,
2956
+ )
2957
+
2958
+ if (live_prereq_terminal or {}).get(entry.key):
2959
+ # #2850 defence in depth: whatever THIS run's own exit reason says
2960
+ # (or doesn't — a crash leaves none at all), a live re-check taken
2961
+ # THIS tick confirms the issue is already closed or its PR merged.
2962
+ # That is stronger evidence than an absent tmux session and absent
2963
+ # board `active_work` could ever be on their own — mark done rather
2964
+ # than let the death-diagnosis logic below spend an attempt
2965
+ # relaunching a drive with nothing left to do.
2966
+ reason = (
2967
+ "drive finished — a live re-check this tick confirms the issue "
2968
+ "is already closed or its PR merged (#2850), independent of "
2969
+ "this run's own exit reason and the cached board"
2970
+ )
2971
+ return (
2972
+ Reconcile(
2973
+ entry.key,
2974
+ "done",
2975
+ reason,
2976
+ occupies=False,
2977
+ updates={
2978
+ "state": STATE_DONE,
2979
+ "last_reason": reason,
2980
+ "session_name": None,
2981
+ },
2982
+ ),
2983
+ None,
2984
+ )
2985
+
2877
2986
  if facts.active_work:
2878
2987
  return (
2879
2988
  Reconcile(
@@ -2916,7 +3025,10 @@ def _reconcile_running(
2916
3025
  # purely for stability — the two codes are mutually exclusive by
2917
3026
  # construction (`_drive_exit_summary` records exactly one), so the order
2918
3027
  # is never actually load-bearing.
2919
- own_reason = (exit_reasons or {}).get(entry.key)
3028
+ #
3029
+ # `own_reason` itself was already resolved above (#2850, before the
3030
+ # `facts.active_work` check) so the merged-exit short-circuit could use
3031
+ # it — reused here unchanged.
2920
3032
 
2921
3033
  # #2063 rides the SAME evidence as `refused` below but reaches the
2922
3034
  # OPPOSITE conclusion, so it is checked first. A Gate-A "no recorded
@@ -4121,6 +4233,7 @@ def plan_tick(
4121
4233
  exit_reasons=exit_reasons,
4122
4234
  exit_refused=exit_refused,
4123
4235
  exit_dead_end=exit_dead_end,
4236
+ live_prereq_terminal=live_prereq_terminal,
4124
4237
  )
4125
4238
  reconciles.append(reconcile)
4126
4239
  if reconcile.occupies:
@@ -550,6 +550,31 @@ def is_policy_refusal_reason(text: str | None) -> bool:
550
550
  return bool(text) and POLICY_REFUSAL_MARKER in text
551
551
 
552
552
 
553
+ # #2850: the machine-readable tag `coord.drive.decide` embeds in its
554
+ # `_succeed()` message when the "terminal: merged" branch's own LIVE check
555
+ # (`MergeVerifier.verify_merged`) confirms the issue has genuinely landed —
556
+ # not merely that the board's cached `merge_status` claims so.
557
+ #
558
+ # Text-marker matching (not a dedicated exit code) mirrors
559
+ # `POLICY_REFUSAL_MARKER` immediately above: `EXIT_OK` is shared by every
560
+ # clean drive exit — this one, a `deliverable:analysis` 0-commit stop, and a
561
+ # `--no-merge` "review approved, stopping here" — so the exit code alone
562
+ # cannot distinguish "confirmed merged" from "stopped short of merging on
563
+ # purpose". `coord/drive_queue.py`'s `_reconcile_running` recognises this
564
+ # straight out of the drive's own `drive_exited` audit summary (`own_reason`)
565
+ # and marks the queue entry `done` instead of requeuing a launch that has
566
+ # nothing left to do — closing the #2850 failure mode: a drive that exits 0
567
+ # having MERGED got requeued and relaunched into dead air, with the bogus
568
+ # `running` row shadowing #2602's own live re-check for every dependent
569
+ # chained `--after` it.
570
+ MERGE_LANDED_MARKER = "[drive-merged #2850]"
571
+
572
+
573
+ def is_merge_landed_reason(text: str | None) -> bool:
574
+ """Whether *text* is a #2850 confirmed-merge drive-exit reason."""
575
+ return bool(text) and MERGE_LANDED_MARKER in text
576
+
577
+
553
578
  @dataclass
554
579
  class Assignment:
555
580
  machine_name: str
@@ -1338,6 +1338,56 @@ def test_a_blocked_entry_resumes_and_launches_once_a_live_recheck_confirms_its_p
1338
1338
  assert len(launches) == 1, launches
1339
1339
 
1340
1340
 
1341
+ def test_a_dependent_is_released_when_its_prereq_is_wrongly_stuck_running(
1342
+ cli, seed, launches, monkeypatch,
1343
+ ):
1344
+ """#2850 end-to-end: the reported vimcode#536/#673 incident shape. The
1345
+ pre-req (1650) sits in the queue under a BOGUS `running` row — exactly
1346
+ what a drive that exited 0 having merged and then got requeued anyway
1347
+ looks like — while the cached board's `issues` row for it still reads
1348
+ "open" (the sync that would flip it hasn't caught up yet). Before this
1349
+ fix, `_resolve_prereqs` read `states[dep] == "running"` and returned
1350
+ "waiting on ... (queued, running)" unconditionally — the `running` row
1351
+ shadowed the SAME live re-check that already resolves a pre-req merely
1352
+ ABSENT from the queue (`test_a_blocked_entry_resumes_...` above) — so
1353
+ the dependent (1654) sat blocked for as long as the bogus row
1354
+ persisted. A live `github_ops.work_is_terminal` re-check taken THIS
1355
+ tick must release the dependent regardless of what the pre-req's own
1356
+ queue row claims."""
1357
+ seed(issues={1650: "open", 1654: "open"})
1358
+ cli("add", REPO, "1650")
1359
+ cli("add", REPO, "1654", "--after", "1650")
1360
+
1361
+ # Simulate the bogus post-merge `running` row directly — a drive that
1362
+ # exited 0 having merged and was requeued, exactly the #2850 symptom
1363
+ # fixes 1/2 (in `coord.drive_queue`) now prevent from ever happening;
1364
+ # this test pins the DEPENDENT side even if some other cause ever
1365
+ # leaves a pre-req wrongly `running` again.
1366
+ state._update_drive_queue_entry_local(REPO, 1650, state="running", attempts=1)
1367
+
1368
+ import coord.github_ops as github_ops
1369
+
1370
+ monkeypatch.setattr(
1371
+ github_ops,
1372
+ "work_is_terminal",
1373
+ lambda repo_github, issue_number, branch, **_kw: (
1374
+ repo_github == "john/claude-coordinator" and issue_number == 1650
1375
+ ),
1376
+ )
1377
+
1378
+ result = cli("tick")
1379
+ assert result.exit_code == 0, result.output
1380
+ dependent = queued(1654)
1381
+ assert dependent["state"] == "running" # launched, not blocked/deferred
1382
+ assert len(launches) == 1, launches
1383
+
1384
+ # #2850 fix 1/2: the pre-req's own bogus `running` row is ALSO
1385
+ # corrected in the SAME tick — reconciled to `done`, not left standing
1386
+ # to requeue yet another dead-air relaunch.
1387
+ prereq = queued(1650)
1388
+ assert prereq["state"] == "done"
1389
+
1390
+
1341
1391
  def test_list_with_no_after_is_unaffected_by_the_2183_diagnosis(cli):
1342
1392
  """A `blocked` entry that never declared any `after=` at all keeps
1343
1393
  rendering exactly as it always has — no board dependency, no remedy
@@ -1990,6 +2040,53 @@ def test_a_permanent_dispatch_refusal_blocks_on_the_first_tick_no_attempt_spent(
1990
2040
  assert state._get_drive_escalation_local(REPO, 1762) is not None
1991
2041
 
1992
2042
 
2043
+ def test_a_confirmed_merge_exit_marks_done_and_never_relaunches(
2044
+ cli, seed, launches,
2045
+ ):
2046
+ """#2850, end-to-end: the reported vimcode#536 incident. A drive that
2047
+ exits 0 having genuinely MERGED (its own `drive_exited` audit summary
2048
+ carries `coord.models.MERGE_LANDED_MARKER`, exactly what
2049
+ `coord.drive.decide`'s "terminal: merged" branch now writes) must mark
2050
+ the queue entry `done` on the very first tick that observes it — NOT
2051
+ fall through to the generic death diagnosis and requeue a second launch
2052
+ for work that is already finished. Before this fix the tick's own log
2053
+ read `exit_code=0: ✓ MERGED … has landed` and STILL requeued it
2054
+ "(attempt 1/2)" and relaunched — a bogus `running` row that then
2055
+ shadowed every `--after` dependent chained onto it.
2056
+ """
2057
+ from coord.audit import record_audit
2058
+ from coord.models import MERGE_LANDED_MARKER
2059
+
2060
+ seed(issues={1762: "open"})
2061
+ cli("add", REPO, "1762")
2062
+ cli("tick")
2063
+ assert len(launches) == 1, launches
2064
+
2065
+ merged_reason = (
2066
+ "drive exited for claude-coordinator#1762 (exit_code=0): ✓ MERGED "
2067
+ f"— issue-1762-example has landed on develop\n {MERGE_LANDED_MARKER}"
2068
+ )
2069
+ launched_at = queued(1762)["launched_at"]
2070
+ _backdate(1762, DRIVE_STARTUP_GRACE_SECONDS + 60)
2071
+ record_audit(
2072
+ tier="business", category="drive", event_type="drive_exited",
2073
+ actor="drive", summary=merged_reason, repo=REPO, issue=1762,
2074
+ ts=launched_at + 5,
2075
+ details={"exit_code": 0, "reason": merged_reason},
2076
+ )
2077
+
2078
+ result = cli("tick")
2079
+ assert result.exit_code == 0, result.output
2080
+ assert "done" in result.output.lower()
2081
+ # NOT the retry path: no second launch was ever spawned for this issue.
2082
+ assert len(launches) == 1, launches
2083
+
2084
+ entry = queued(1762)
2085
+ assert entry["state"] == "done"
2086
+ assert entry["attempts"] == 0 # never spent — this was never a death
2087
+ assert MERGE_LANDED_MARKER in (entry["last_reason"] or "")
2088
+
2089
+
1993
2090
  # ── #1891: `parked` — a missing CI verdict must not consume merge budget ────
1994
2091
  #
1995
2092
  # Black-box per this repo's CLAUDE.md: drives the queue through a simulated
@@ -49,6 +49,7 @@ from coord.drive_queue import (
49
49
  render_plan,
50
50
  validate_enqueue,
51
51
  )
52
+ from coord.models import MERGE_LANDED_MARKER
52
53
 
53
54
  REPO = "claude-coordinator"
54
55
 
@@ -2738,6 +2739,178 @@ def test_a_policy_refusal_still_reconciles_to_done_if_it_lands_by_hand():
2738
2739
  assert reconcile.updates["state"] == STATE_DONE
2739
2740
 
2740
2741
 
2742
+ # ═══════════════════════════════════════════════════════════════════════════
2743
+ # #2850: a drive that exits 0 having MERGED must reconcile straight to
2744
+ # `done`, never `retry` — before this fix, `own_reason` carried the drive's
2745
+ # own "✓ MERGED — … has landed" text but `_reconcile_running` never read it
2746
+ # for anything but the gate_a/policy/refused/dead_end special cases, so a
2747
+ # confirmed-landed drive fell all the way through to the generic "no
2748
+ # session, no active work, nothing landed" death diagnosis and got
2749
+ # requeued — the reported vimcode#536 incident. Two independent recoveries,
2750
+ # reproduced separately: `own_reason` naming a confirmed merge (#2850 fix 1),
2751
+ # and a live re-check confirming landed independent of `own_reason` (#2850
2752
+ # fix 2) — and, on the DEPENDENT side, a pre-req's queue row no longer
2753
+ # shadowing that same live re-check just because it is present and not yet
2754
+ # `done` (#2850 fix 3).
2755
+ # ═══════════════════════════════════════════════════════════════════════════
2756
+
2757
+ MERGED_OWN_REASON = (
2758
+ "drive exited for claude-coordinator#1650 (exit_code=0): ✓ MERGED — "
2759
+ f"issue-1650-example has landed on develop\n {MERGE_LANDED_MARKER}"
2760
+ )
2761
+
2762
+
2763
+ def test_an_own_reason_confirming_merge_reconciles_to_done_not_retry():
2764
+ """#2850 fix 1, the literal reported shape: exit_code=0, `own_reason`
2765
+ narrates a confirmed merge — must mark `done` on the FIRST tick that
2766
+ observes it, not spend a retry attempt requeuing a launch with nothing
2767
+ left to do."""
2768
+ entries = [entry(1650, position=3, state=STATE_RUNNING, attempts=0)]
2769
+ plan = plan_tick(
2770
+ entries, board(), capacity=1,
2771
+ exit_reasons={entry_key(REPO, 1650): MERGED_OWN_REASON},
2772
+ )
2773
+ reconcile = plan.reconciles[0]
2774
+ assert reconcile.outcome == "done"
2775
+ assert reconcile.updates["state"] == STATE_DONE
2776
+ assert "attempts" not in reconcile.updates # never spent
2777
+ assert plan.blocked == ()
2778
+ assert plan.launch is None
2779
+
2780
+
2781
+ def test_a_merge_landed_own_reason_wins_even_deep_into_the_attempt_budget():
2782
+ entries = [
2783
+ entry(1650, state=STATE_RUNNING, attempts=DEFAULT_MAX_ATTEMPTS - 1)
2784
+ ]
2785
+ plan = plan_tick(
2786
+ entries, board(), capacity=1,
2787
+ exit_reasons={entry_key(REPO, 1650): MERGED_OWN_REASON},
2788
+ )
2789
+ assert plan.reconciles[0].outcome == "done" # not "exhausted"
2790
+ assert plan.blocked == ()
2791
+
2792
+
2793
+ def test_an_own_reason_that_merely_mentions_merge_without_the_marker_still_retries():
2794
+ """The marker, not the human-readable "MERGED" text, is what decides
2795
+ this — a reason that talks ABOUT a merge (e.g. a merge-gate failure
2796
+ diagnosis) without #2850's `MERGE_LANDED_MARKER` must not be
2797
+ misread as a confirmed landing."""
2798
+ entries = [
2799
+ entry(
2800
+ 1650,
2801
+ state=STATE_RUNNING,
2802
+ attempts=0,
2803
+ launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
2804
+ )
2805
+ ]
2806
+ own_reason = (
2807
+ "drive exited for claude-coordinator#1650 (exit_code=1): merge "
2808
+ "attempted 3 times without landing."
2809
+ )
2810
+ plan = plan_tick(
2811
+ entries, board(), capacity=1, now=NOW,
2812
+ exit_reasons={entry_key(REPO, 1650): own_reason},
2813
+ )
2814
+ assert plan.reconciles[0].outcome == "retry"
2815
+
2816
+
2817
+ def test_a_live_recheck_marks_a_dead_running_entry_done_with_no_own_reason_at_all():
2818
+ """#2850 fix 2: `live_prereq_terminal` is now ALSO consulted for a
2819
+ `running` entry's OWN key, independent of whatever (if anything) its
2820
+ `own_reason` says — a crash that left no exit reason at all, or an exit
2821
+ reason unrelated to landing, must still be caught if a live re-check
2822
+ this tick confirms the issue already closed or merged."""
2823
+ entries = [
2824
+ entry(
2825
+ 1650,
2826
+ state=STATE_RUNNING,
2827
+ attempts=0,
2828
+ launched_at=NOW - DRIVE_STARTUP_GRACE_SECONDS - 1,
2829
+ )
2830
+ ]
2831
+ plan = plan_tick(
2832
+ entries, board(), capacity=1, now=NOW,
2833
+ live_prereq_terminal={entry_key(REPO, 1650): True},
2834
+ )
2835
+ reconcile = plan.reconciles[0]
2836
+ assert reconcile.outcome == "done"
2837
+ assert reconcile.updates["state"] == STATE_DONE
2838
+ assert plan.blocked == ()
2839
+
2840
+
2841
+ def test_a_dependent_is_released_when_its_queued_but_not_done_prereq_has_live_landed():
2842
+ """#2850 fix 3: `_resolve_prereqs`'s `dep_state is not None` branch used
2843
+ to return "waiting on {dep} (queued, {dep_state})" unconditionally for
2844
+ any state short of `done` — never consulting `live_prereq_terminal`,
2845
+ unlike its own final branch for a dep absent from the queue altogether
2846
+ (#2602). A pre-req sitting in the queue under ANY other state must
2847
+ release its dependent the moment a live re-check confirms it actually
2848
+ landed. Position 0 goes to the DEPENDENT (not the pre-req) so a passing
2849
+ assertion on ``plan.launch`` is unambiguous — `plan_tick` launches at
2850
+ most one entry per tick, position order first, so a `STATE_WAITING`
2851
+ pre-req sitting at an earlier position would otherwise win the single
2852
+ launch slot on its own unrelated eligibility and mask the very thing
2853
+ under test."""
2854
+ entries = [
2855
+ entry(1654, position=0, after=(entry_key(REPO, 1650),)),
2856
+ entry(1650, position=1, state=STATE_WAITING),
2857
+ ]
2858
+ plan = plan_tick(
2859
+ entries, board(), capacity=2,
2860
+ live_prereq_terminal={entry_key(REPO, 1650): True},
2861
+ )
2862
+ assert plan.launch is not None
2863
+ assert plan.launch.issue == 1654
2864
+
2865
+
2866
+ def test_a_dependent_is_released_when_its_prereq_is_wrongly_stuck_running():
2867
+ """The exact reported incident, reproduced end to end: a pre-req sits in
2868
+ a bogus `running` row (a drive that exited 0 having merged, requeued —
2869
+ the shape #2850 fixes 1/2 now prevent, but this pins the DEPENDENT side
2870
+ even if some other cause ever leaves a pre-req wrongly `running` again).
2871
+ A live re-check confirming the pre-req landed must release the
2872
+ dependent on THIS tick, whatever the pre-req's own row still claims —
2873
+ and the pre-req's own bogus `running` row is corrected in the SAME
2874
+ tick, not requeued into yet another relaunch."""
2875
+ entries = [
2876
+ entry(1650, position=0, state=STATE_RUNNING),
2877
+ entry(1654, position=1, after=(entry_key(REPO, 1650),)),
2878
+ ]
2879
+ plan = plan_tick(
2880
+ entries, board(), capacity=2,
2881
+ live_prereq_terminal={entry_key(REPO, 1650): True},
2882
+ )
2883
+ assert plan.launch is not None
2884
+ assert plan.launch.issue == 1654
2885
+ prereq_reconcile = next(
2886
+ r for r in plan.reconciles if r.key == entry_key(REPO, 1650)
2887
+ )
2888
+ assert prereq_reconcile.outcome == "done"
2889
+
2890
+
2891
+ def test_a_dependent_is_released_when_its_prereq_is_blocked_but_live_landed():
2892
+ """Fix 3 pinned in ISOLATION from fix 2: a `blocked` pre-req never goes
2893
+ through `_reconcile_running`'s step-1 walk at all (that loop only
2894
+ touches `STATE_RUNNING` rows), so `states[dep]` stays `STATE_BLOCKED`
2895
+ for the whole tick — the ONLY thing that can release the dependent here
2896
+ is `_resolve_prereqs` itself consulting `live_prereq_terminal`. Before
2897
+ #2850 this branch (`dep_state in (STATE_BLOCKED, STATE_FAILED)`)
2898
+ returned "it will never satisfy" unconditionally, matching #2055's own
2899
+ rationale for re-checking a `blocked` pre-req's OWN row — a human can
2900
+ merge a blocked issue's work out of band just as easily as a running
2901
+ one's."""
2902
+ entries = [
2903
+ entry(1654, position=0, after=(entry_key(REPO, 1650),)),
2904
+ entry(1650, position=1, state=STATE_BLOCKED, attempts=2),
2905
+ ]
2906
+ plan = plan_tick(
2907
+ entries, board(), capacity=1,
2908
+ live_prereq_terminal={entry_key(REPO, 1650): True},
2909
+ )
2910
+ assert plan.launch is not None
2911
+ assert plan.launch.issue == 1654
2912
+
2913
+
2741
2914
  # ── #2055: `blocked`/`failed` re-checked against the board too ─────────────
2742
2915
  #
2743
2916
  # #1891's landed re-check above was `parked`-only. `blocked`/`failed` got no